1. TOP
  2. ブログ
  3. Django SQL データベース 操作 まとめ 入門(1)全件、1件、件数

Django SQL データベース 操作 まとめ 入門(1)全件、1件、件数

更新日:2018年7月16日

Djangoで、モデルで定義したデータベースのテーブルからデータを取得したり操作したりする方法をDjangoの公式ドキュメントを参考にして、記載しています。

環境:Python3.6.5 Django2.0.8

全件取得:all()

models.py例

queryset = Entry.objects.all()

template例

{% for entry in queryset %}
    {{entry.title}}
{% endfor %}

LIMIT 5:最初の5件取得:[:5]

models.py例

queryset = Entry.objects.all()[:5]

上記はインデックスが0~4の5件のデータ取得となります。

OFFSET 5 LIMIT 4:6番目から9番目までのオブジェクト取得:[5:9]

queryset = Entry.objects.all()[5:9]

上記はインデックスが5~8(6番目から9番目までのデータ)のデータ4件取得となります。
LIMITは9でなく、インデックス5~8までの件数4です。
最初の5は開始インデックス、次の9は終了インデックスで、インデックス9のデータは含まれないので注意が必要です。
このあたりはPythonのsliceの仕様となっているようです。

終了インデックス:10、STEP:2

Entry.objects.all()[:10:2]

上記は最初の10件から一つおきにとったリスト(1,3,5,7,9番目のデータ)となります。
LIMIT 10で取得したデータの内 STEP 2ごと取得できます。

1件取得

1つのオブジェクトを取得するには、単純にリストのインデックスを使用します。

Entry.objects.order_by('headline')[0]

上記はheadlineでソートした後、1件目のデータとなります。

Entry.objects.order_by('headline')[0:1].get()

上記の[0:1].get()でも同じデータが取得できますが、1件もない場合、[0]はIndexError、
[0:1].get()は DoesNotExist のエラーとなる事に注意して下さい。

また、Entry.objects.get()で、2件以上レコードがある場合は、 MultipleObjectsReturned のエラーとなります。

1件取得 get() のエラー処理の詳細については下記公式ドキュメントを参照して下さい。
QuerySet API reference #get()

SELECT COUNT(*):件数取得:count()

Entry.objects.count()
Entry.objects.filter(headline__contains='Lennon').count()

件数は上記のようにcount()で取得できます。
なお、下記のようにPythonのlen関数で、件数を取得する事も可能です。
すでにクエリセットを取得している場合は、再度データベースにアクセスせずに件数を取得できるので、効率がいい場合があるようです。

len(Entry.objects.all())

B!

前の記事:Django2.0 モデル(models)のForeignKeyフィールドで on_delete の引数指定が必須

次の記事:Django SQL データベース 操作 まとめ 入門(2)where条件 filter(),exclude(),Qオブジェクト