django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢
先以mysql的語(yǔ)句,聚合用在分組里,
對(duì)mysql中g(shù)roupby 是分組
每什么的時(shí)候就要分組,如 每個(gè)小組,就按小組分,
group by 字段 having 聚合函數(shù)
#舉例 :求班里的平均成績(jī), select Avg(score) from stu
在django中
聚合 是aggreate(*args,**kwargs),通過(guò)QuerySet 進(jìn)行計(jì)算。做求值運(yùn)算的時(shí)候使用
分組 是annotate(*args,**kwargs),括號(hào)里是條件,遇到 每什么的時(shí)候就要分組,
先從models 導(dǎo)入要用到的函數(shù)
from django.db.models import Min,Avg,Max,Sum
def aggregate(request):
#求所有書籍的平均價(jià)格
ret11 = Book.objects.all().aggregate(Avg("price"))
# print(ret11)#{'price__avg': 51.975}
#求所有書籍的最高價(jià)
ret12 = Book.objects.all().aggregate(MaxPrice=Max('price'))
# print(ret12)#{'MaxPrice': Decimal('100.00')}
#egon 出版過(guò)書籍的最高價(jià)格
p = Book.objects.filter(authors__name='egon').aggregate(Max('price'))
print(p)#{'price__max': Decimal('100.00')}
#分組 annotate()
#每一個(gè)作者出版過(guò)的書的最高價(jià) ,
#解析,按照作者的名字分組,就要用到values,顯示的是字段的名字,
b1 = Book.objects.values('authors__name').annotate(Max('price'))
print(b1)
#<QuerySet [{'authors__name': 'egon', 'price__max': Decimal('100.00')},
# {'authors__name': 'alex', 'price__max': Decimal('100.00')},
# {'authors__name': 'yuan', 'price__max': Decimal('100.00')},
# {'authors__name': 'oldboy', 'price__max': Decimal('100.00')}]># 四個(gè)作者都關(guān)聯(lián)了同一本書,而這本書又是最高價(jià)
#每個(gè)出版社出版的最低價(jià)格的書籍
b2 = Book.objects.values('publish__name').annotate(Min('price'))
print(b2)
#<QuerySet [{'publish__name': '北京出版社', 'price__min': Decimal('100.00')},
# {'publish__name': '河下出版社', 'price__min': Decimal('45.00')},
# {'publish__name': '清華出版社', 'price__min': Decimal('39.90')},
# {'publish__name': '人民出版社', 'price__min': Decimal('23.00')}]>
F Q 查詢
F,主要是做查詢
Q查詢 可以做組合條件的查詢 & 是 與 ,|(管道符) 或,~ 非
def FAndQ(request):
#給每本書漲價(jià)10元,
#用sql語(yǔ)句寫 update book set price=price+10
#F,主要是做查詢
# Book.objects.all().update(price=F('price')+10)
#查詢書籍是富開頭,并且價(jià)格大于30的書籍 ,逗號(hào) 可以做 與 的關(guān)系查詢
b4 = Book.objects.filter(title__startswith="富",price__gt=30)
# print(b4)#<QuerySet [<Book: 富爸爸>]>
#Q查詢 可以做組合條件的查詢 & 是 與 ,|(管道符) 或,~ 非
##查詢書籍是富開頭,或價(jià)格大于30的書籍
b5 = Book.objects.filter(Q(title__startswith="富") | Q(price__gt=60))
# print(b5)
#<QuerySet [<Book: Linux>, <Book: 項(xiàng)塔蘭>, <Book: 追風(fēng)箏的人>, <Book: 富爸爸>]>
#組合查詢,以富開頭,價(jià)格大于60 ,或者id大于5的書籍
b6 = Book.objects.filter(Q(title__startswith="富")&Q(price__gt=60)|Q(id__gt=5))
#print(b6)#<QuerySet [<Book: 富兒子>]>
#
#查詢條件如果不加Q,就要放到最后面,
b7 = Book.objects.filter(Q(price__gt=60) | Q(id__gt=5),title__startswith="富")
# print(b7)
# ~ 取反的意思
b8 = Book.objects.filter(Q(title__startswith="富") & ~Q(price__gt=60) | Q(id__gt=5))
print(b8)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)
這篇文章主要介紹了提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
python執(zhí)行shell并獲取結(jié)果的詳細(xì)示例
在Python中執(zhí)行Shell命令并獲取其結(jié)果,通??梢允褂胹ubprocess模塊,這個(gè)模塊允許我們啟動(dòng)新的進(jìn)程,連接到它們的輸入/輸出/錯(cuò)誤管道,并獲取它們的返回碼,下面是一個(gè)詳細(xì)的示例,展示了如何使用subprocess.run()函數(shù)來(lái)執(zhí)行Shell命令并獲取其輸出,需要的朋友可以參考下2024-07-07
Python Collatz序列實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python Collatz序列實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
python經(jīng)典百題之static定義靜態(tài)變量的三種方法
日常腳本編寫過(guò)程中時(shí)常會(huì)用到python的靜態(tài)方法、實(shí)例方法、類方法,下面這篇文章主要給大家介紹了關(guān)于python經(jīng)典百題之static定義靜態(tài)變量的三種方法,需要的朋友可以參考下2024-09-09
python中關(guān)于對(duì)super()函數(shù)疑問(wèn)解惑
Python中的super()是用于調(diào)用父類(或父類的父類...)方法的函數(shù),主要用于多繼承,單繼承問(wèn)題不大,下面這篇文章主要給大家介紹了關(guān)于python中關(guān)于對(duì)super()函數(shù)疑問(wèn)解惑的相關(guān)資料,需要的朋友可以參考下2022-08-08
Python使用matplotlib繪制圓形代碼實(shí)例
這篇文章主要介紹了Python使用matplotlib繪制圓形代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

