Django SQL データベース 操作 まとめ 入門(1)全件、1件、件数
更新日:2021年2月1日環境:Python3.8.2 Django3.1.5
全件取得:all()
models.py例
template例
{{entry.title}}
{% endfor %}
LIMIT 5:最初の5件取得:[:5]
models.py例
上記はインデックスが0~4の5件のデータ取得となります。
OFFSET 5 LIMIT 4:6番目から9番目までのオブジェクト取得:[5:9]
上記はインデックスが5~8(6番目から9番目までのデータ)のデータ4件取得となります。
LIMITは9でなく、インデックス5~8までの件数4です。
最初の5は開始インデックス、次の9は終了インデックスで、インデックス9のデータは含まれないので注意が必要です。
このあたりはPythonのsliceの仕様となっているようです。
終了インデックス:10、STEP:2
上記は最初の10件から一つおきにとったリスト(1,3,5,7,9番目のデータ)となります。
LIMIT 10で取得したデータの内 STEP 2ごと取得できます。
1件取得
1つのオブジェクトを取得するには、単純にリストのインデックスを使用します。
上記はheadlineでソートした後、1件目のデータとなります。
上記の[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.filter(headline__contains='Lennon').count()
件数は上記のようにcount()で取得できます。
なお、下記のようにPythonのlen関数で、件数を取得する事も可能です。
すでにクエリセットを取得している場合は、再度データベースにアクセスせずに件数を取得できるので、効率がいい場合があるようです。