1. 程式人生 > >orm聚合查詢、分組查詢、F查詢和Q查詢

orm聚合查詢、分組查詢、F查詢和Q查詢

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查詢