Django QuerySetステップアップ
2155 ワード
, :Python 。
QuerySetとは
QuerySetはDjangoが提供する強力なデータベースインタフェース(API)である.これにより、元のSQL言語でデータベースと対話する必要がなく、filter、exclude、getなどの方法でデータベースクエリーを行うことができます.データベースからクエリされた結果は一般的に1つの集合であり、この集合はquerysetと呼ばれます.
1. values_Listメタグループ形式の結果の取得
例えば、著者のnameとqqの2つのフィールドの情報を取得します.
authors = Author.objects.values_list(‘name’, ‘qq’)
2.values辞書形式の結果を取得
例えば、著者のnameとqqの2つのフィールドの情報を取得します.
authors = Author.objects.values(‘name’, ‘qq’)
注意:
3.annotate集約カウント、合計、平均数など
3.1カウント
各著者の文章数を計算してみましょう
Article.objects.all().values(‘author_id’).annotate(count=Count(‘author’)).values(‘author_id’, ‘count’)
3.2平均
作者のすべての文章の得点(score)の平均値を求めます
Article.objects.values(‘author_id’).annotate(avg_score=Avg(‘score’)).values(‘author_id’, ‘avg_score’)
3.3加算
作者のすべての文章の総点を求めます
Article.objects.values(‘author__name’).annotate(sum_score=Sum(‘score’)).values(‘author__name’, ‘sum_score’)
4. select_relatedは、1対1、複数対1のクエリーを最適化します(データベースへのアクセスを減らす)
1つの文章には1人の作者しかいません.
articles = Article.objects.all().select_related(‘author’)[:10]
5. prefetch_related最適化一対多,多対多クエリー
select_related , 。select_related SQL JOIN 。prefetch_related , , select_related , 。
prefetch_related SQL , Python SQL (joining)
「記事」と「ラベル」は、複数対複数の関係です.
articles = Article.objects.all().prefetch_related(‘tags’)[:10]
6.defer不要なフィールドの除外
, , Python 。
defer , , , ( python , )
Article.objects.all().defer(‘content’)#ここでcontentフィールドを調べていないことに注意してください
7.only必要なフィールドのみ選択
deferとは逆にonlyは必要なフィールドを取り出すために使用されます.もし著者の名前を調べるだけなら
Author.objects.all().only(‘name’)