Django自帶的ORM如何執(zhí)行g(shù)roup by語句

問題描述:

使用Django的ORM建立了如下Model:

class Book(models.Model):
    name = models.CharField(max_length=300)
    pages = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    authors = models.CharField(max_length=300)
    publisher = models.CharField(max_length300)
    pub_date = models.DateField()

現(xiàn)在想查詢以字段authors分組,查出每個作者所著所有書的總頁書,用SQL語句可以很容易的完成此任務(wù):

SELECT *, SUM(pages) AS total_pages
FROM Book
GROUP BY authors;

那么如何用Django自帶的ORM接口實現(xiàn)呢?

方法如下:

from django.db.models import Sum

result = Book.objects.values("authors").annotate(total_pages=Sum("pages")).all()

注意事項:

如果你在定義Book模型時指定的默認的排序字段,如下:

class Book(models.Model):

    ...同上...
    
    class Meta:
        ordering = ["name"]

那么,上述result的查詢語句會得到錯誤的結(jié)果, 其所執(zhí)行的SQL語句如下

SELECT *, SUM(pages) AS total_pages
FROM Book
GROUP BY authors, name
ORDER BY name;

也就是說默認的排序字段(在這里是name)也會自動加入到GROUP BY子句中. 要避免這樣的情況,只需在查詢時清空默認的order by排序條件即可:

from django.db.models import Sum

result = Book.objects.values("authors").annotate(total_pages=Sum("pages")).order_by()

ps:你可以通過以下方法查看查詢集的對應(yīng)SQL語句

raw_sql = result.query
print(raw_sql)

或者安裝django-extensions插件,然后使用python manage.py shell_plus --print-sql命令進入Shell,在此Shell中你通過Django對數(shù)據(jù)庫執(zhí)行的所有操作都會自動打印出其對應(yīng)的SQL語句.

除了上述方法贸伐,還有另外一種:

book_list = Book.objects.all()
book_list.query.group_by = ['authors']

這種方法是通過直接操作query對象的屬性膛腐,更容易些,然而我不太懂Query對象姨伤,所以不太敢用动看。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堤器,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件末贾,死亡現(xiàn)場離奇詭異,居然都是意外死亡整吆,警方通過查閱死者的電腦和手機拱撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來表蝙,“玉大人拴测,你說我怎么就攤上這事「撸” “怎么了集索?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我务荆,道長妆距,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任函匕,我火速辦了婚禮娱据,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盅惜。我一直安慰自己中剩,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布抒寂。 她就那樣靜靜地躺著结啼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屈芜。 梳的紋絲不亂的頭發(fā)上郊愧,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音沸伏,去河邊找鬼糕珊。 笑死,一個胖子當著我的面吹牛毅糟,可吹牛的內(nèi)容都是我干的红选。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼姆另,長吁一口氣:“原來是場噩夢啊……” “哼喇肋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迹辐,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蝶防,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后明吩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间学,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年印荔,在試婚紗的時候發(fā)現(xiàn)自己被綠了低葫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡仍律,死狀恐怖嘿悬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情水泉,我是刑警寧澤善涨,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布窒盐,位于F島的核電站,受9級特大地震影響钢拧,放射性物質(zhì)發(fā)生泄漏蟹漓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一娶靡、第九天 我趴在偏房一處隱蔽的房頂上張望牧牢。 院中可真熱鬧,春花似錦姿锭、人聲如沸塔鳍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轮纫。三九已至,卻和暖如春焚鲜,著一層夾襖步出監(jiān)牢的瞬間掌唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工忿磅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糯彬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓葱她,卻偏偏與公主長得像撩扒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吨些,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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