orm聚合查詢、分組查詢、F查詢和Q查詢
阿新 • • 發佈:2018-11-14
all where 最大 ota lte rom gate first 紅樓夢
1.聚合查詢(Avg,Count,Max,Min,Sum)
Avg為求平均數,Count為求個數,Max為求最大值,Min為求最小值,Sum為求和
以Avg舉例
from django.db.models import Avg,Count,Max,Min,Sum
ret=Book.objects.all().aggregate(Avg(‘price‘)) //其中price必須是以有的字段
2.分組查詢
? 要點:
? values在annotate前,表示group by,在annotate後,表示取值
? filter在annotate前,表示過濾(where),在annotate後,表示having(對分組之後的結果再進行過濾)
? 其中在前的value可以省略默認用id進行分組
Author.object.all().annotate(a=Sum(‘book__price‘)).filter(name=‘小王‘).first()
3.F查詢
? F為了字段=後面的值,不能放字段,所以用F函數包裹一下就可以了
Book.objects.update(price=F(‘price‘)+1)
4.Q查詢
? Q為了構造 與& ,或| , 非~的關系
? 註意Q查詢的非的符號是~
books = Book.objects.filter(~Q(name=‘紅樓夢‘)).all().values(‘name‘)
orm聚合查詢、分組查詢、F查詢和Q查詢