Django聚合分組及F與Q查詢

聚合查詢

aggregate()是QuerySet 的一個(gè)終止子句蛾派,意思是說(shuō)帝牡,它返回一個(gè)包含一些鍵值對(duì)的字典往毡。
鍵的名稱是聚合值的標(biāo)識(shí)符,值是計(jì)算出來(lái)的聚合值靶溜。鍵的名稱是按照字段和聚合函數(shù)的名稱自動(dòng)生成出來(lái)的
導(dǎo)入庫(kù) :from django.db.models import Avg,Sum,Count
源數(shù)據(jù)表:

class Mysales(models.Model):
    id = models.AutoField(primary_key=True)
    number = models.IntegerField(default=1000)
    price = models.DecimalField(max_digits=6,decimal_places=2,default=10)
    last_number = models.IntegerField(default=800)
    total = models.DecimalField(max_digits=12,decimal_places=2,default=10000)
  from django.db.models import Avg,Sum,Count,Max,Min
    print('聚合用法'.center(50))
    ret = models.Mysales.objects.all().aggregate(Avg('number'))
    print(ret)
    ret1 = models.Mysales.objects.all().aggregate(K=Min('number'),
    v=Max('number'))
    print(ret1)
運(yùn)行結(jié)果:
                       聚合用法                       
{'number__avg': 64259.4}
{'K': 453, 'v': 315355}

分組查詢 相當(dāng)于SQL中g(shù)roup by

annotate()

  • 統(tǒng)計(jì)每一本書的作者個(gè)數(shù)
 ret = models.Author.objects.all().annotate(price_sum=
Sum("book__price")).values_list("name","price_sum")
 for i in ret:
    print(i[0],i[1])

F查詢

在上面所有的例子中开瞭,我們構(gòu)造的過(guò)濾器都只是將字段值與某個(gè)常量做比較。如果我們要對(duì)兩個(gè)字段的值做比較罩息,那該怎么做呢嗤详?
Django 提供 F() 來(lái)做這樣的比較。F() 的實(shí)例可以在查詢中引用字段瓷炮,來(lái)比較同一個(gè) model 實(shí)例中兩個(gè)不同字段的值葱色。

  • 列出number大于列l(wèi)ast_number的數(shù)據(jù)
 from django.db.models import F
    ret = models.Mysales.objects.filter(number__gt=F('last_number'))
    for i in ret:
        print(i.number)
運(yùn)行結(jié)果:
1000
3255
1234

Django 支持 F() 對(duì)象之間以及 F() 對(duì)象和常數(shù)之間的加減乘除和取模的操作。它必須與update()用法相配合

  • number 字段同時(shí)*3
 from django.db.models import F
 models.Mysales.objects.update(number=F('number')*3)
image.png
  • 計(jì)算total
    total = number*price
from django.db.models import F
    models.Mysales.objects.update(total = F('number')*F('price'))
image.png

Q查詢

filter() 等方法中的關(guān)鍵字參數(shù)查詢都是一起進(jìn)行“AND” 的娘香。 如果你需要執(zhí)行更復(fù)雜的查詢(例如OR語(yǔ)句)苍狰,你可以使用Q對(duì)象办龄。

  • 查詢number大于3000或price小于1000的數(shù)據(jù)

  from django.db.models import Q
    ret = models.Mysales.objects.filter(Q(number__gt=3000)|Q(price__lt=1000))
    for i in ret:
        print(i.number,i.price,i.total)
運(yùn)行結(jié)果:
3000 13.00 39000.00
1359 353.00 479727.00
946065 34.63 32762230.95
9765 1134.67 11080052.55
3702 345.52 1279115.04
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市淋昭,隨后出現(xiàn)的幾起案子俐填,更是在濱河造成了極大的恐慌,老刑警劉巖翔忽,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件英融,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡歇式,警方通過(guò)查閱死者的電腦和手機(jī)驶悟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贬丛,“玉大人撩银,你說(shuō)我怎么就攤上這事给涕〔蜚荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵够庙,是天一觀的道長(zhǎng)恭应。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耘眨,這世上最難降的妖魔是什么昼榛? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮剔难,結(jié)果婚禮上胆屿,老公的妹妹穿的比我還像新娘。我一直安慰自己偶宫,他們只是感情好非迹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纯趋,像睡著了一般憎兽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吵冒,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天纯命,我揣著相機(jī)與錄音,去河邊找鬼痹栖。 笑死亿汞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揪阿。 我是一名探鬼主播疗我,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匙铡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碍粥?” 一聲冷哼從身側(cè)響起鳖眼,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚼摩,沒(méi)想到半個(gè)月后钦讳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枕面,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年愿卒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮秘。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琼开,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枕荞,到底是詐尸還是另有隱情柜候,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布躏精,位于F島的核電站渣刷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏矗烛。R本人自食惡果不足惜辅柴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞭吃。 院中可真熱鬧碌嘀,春花似錦、人聲如沸歪架。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牡拇。三九已至魁瞪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惠呼,已是汗流浹背导俘。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剔蹋,地道東北人旅薄。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親少梁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洛口,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容