django框架F&Q 聚合與分組操作示例
更新時間:2019年12月12日 10:10:51 作者:dawn-liu
這篇文章主要介紹了django框架F&Q 聚合與分組操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架查詢條件取對象中某列值、構(gòu)建搜索條件以及聚合查詢等相關(guān)操作技巧,需要的朋友可以參考下
本文實(shí)例講述了django框架F&Q 聚合與分組操作。分享給大家供大家參考,具體如下:
F 使用查詢條件的值,專門取對象中某列值的操作,可以對同一個表中的兩個列進(jìn)行比較
from django.db.models import F
ret=models.Book.objects.filter(count__lt=F('sale')).values() #查找 列 count < sale的數(shù)據(jù)
for i in ret:
print(i)
models.Book.objects.filter(sale__gt=F('stock')) #將一個表中的sale和stock進(jìn)行比較
models.Book.objects.update(sale=F('sale')*2) #將列sale的數(shù)據(jù)*2,數(shù)據(jù)自動提交到數(shù)據(jù)庫 print(models.Book.objects.all().values())
Q 構(gòu)建搜索條件
from django.db.models import Q #找出滿足兩個條件的值 ret=models.Book.objects.filter(id__gte=3,title='學(xué)泡妞').values() print(ret) #使用Q 中的 | 是或的關(guān)系 ret=models.Book.objects.filter(Q(id__lt=2)| Q(id__gte=3)).values() print(ret) #使用 & 與的關(guān)系 ret=models.Book.objects.filter(Q(title='學(xué)泡妞') & Q(id__gte=3)).values() print(ret) # ~Q 是非的關(guān)系 ret=models.Book.objects.filter(~Q(Q(title='學(xué)泡妞') & Q(id__gte=3))).values() print(ret)
聚合查詢---關(guān)鍵字aggregate
#統(tǒng)計(jì)所有書的平均價格:聚合
from django.db.models import Avg,Count,Max,Min
ret=Book.objects.all().aggregate(c=Avg("price"))
print(ret) #{'c': 114.66666666666667}
分組查詢----關(guān)鍵字annotate
#查詢每個出版社出版的書籍個數(shù)
ret=Publish.objects.all().annotate(c=Count("book")).values("name","c")
print(ret) #<QuerySet [{'name': '蘋果出版社', 'c': 1}, {'name': '桔子出版社', 'c': 2}]>
#查詢每一個作者出版的書籍的平均價格
ret=Author.objects.all().annotate(price_avg=Avg("book__price")).values("name","price_avg")
print(ret)#<QuerySet [{'name': 'alex', 'price_avg': 116.5}, {'name': 'egon', 'price_avg': 114.66666666666667}, {'name': 'yuan', 'price_avg': 111.0}]>
#查詢每一本書籍名稱以及作者個數(shù)
ret=Book.objects.all().annotate(c=Count("author")).values("title","c")
print(ret) #<QuerySet [{'title': '歷險記', 'c': 2}, {'title': 'go', 'c': 2}, {'title': 'java', 'c': 2}]>
#查詢價格大于100的每一本書籍名稱以及作者個數(shù)
ret = Book.objects.filter(price__gt=100).annotate(c=Count("author")).values("title", "c")
print(ret)
區(qū)別:查詢所有書的平均價格用聚合,查詢每本書的平均價格用分組
希望本文所述對大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python3用tkinter和PIL實(shí)現(xiàn)看圖工具
這篇文章給大家分享了Python3用tkinter和PIL實(shí)現(xiàn)看圖工具的詳細(xì)實(shí)例代碼,有興趣的朋友參考學(xué)習(xí)下。2018-06-06
Python實(shí)現(xiàn)Word文檔樣式批量處理
這篇文章主要為大家詳細(xì)介紹了如何利用Python中的python-docx非標(biāo)準(zhǔn)庫實(shí)現(xiàn)word文檔樣式批量處理,文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05
Python高級編程之消息隊(duì)列(Queue)與進(jìn)程池(Pool)實(shí)例詳解
這篇文章主要介紹了Python高級編程之消息隊(duì)列(Queue)與進(jìn)程池(Pool),結(jié)合實(shí)例形式詳細(xì)分析了Python消息隊(duì)列與進(jìn)程池的相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-11-11

