成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Django中Aggregation聚合的基本使用方法

瀏覽:204日期:2024-09-27 18:04:45

Django 的 filter、exclude 等方法使得對數據庫的查詢很方便了。這在數據量較小的時候還不錯,但如果數據量很大,或者查詢條件比較復雜,那么查詢效率就會很低。

提高數據庫查詢效率可以通過原生 SQL 語句來實現,但是它的缺點就是需要開發者熟練掌握 SQL。倘若查詢條件是動態變化的,則編寫 SQL 會更加困難。

對于以便捷著稱的 Django,怎么能忍受這樣的事。于是就有了 Aggregation聚合 。

聚合最好的例子就是官網給的案例了:

# models.pyfrom django.db import modelsclass Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField()class Publisher(models.Model): name = models.CharField(max_length=300)class Book(models.Model): name = models.CharField(max_length=300) pages = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) rating = models.FloatField() authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) pubdate = models.DateField()class Store(models.Model): name = models.CharField(max_length=300) books = models.ManyToManyField(Book)

接下來可以這樣求所有書籍的平均價格:

>>> from django.db.models import Avg, Max, Min>>> Book.objects.all().aggregate(Avg(’price’)){’price__avg’: Decimal(’30.67’)}

實際上可以省掉 all() :

>>> Book.objects.aggregate(Avg(’price’)){’price__avg’: Decimal(’30.67’)}

還可以指定返回的鍵名:

>>> Book.objects.aggregate(price_avg=Avg(’price’)){’price_avg’: Decimal(’30.67’)}

如果要獲取所有書籍中的最高價格:

>>> Book.objects.aggregate(Max(’price’)){’price__max’: Decimal(’44’)}

獲取所有書籍中的最低價格:

>>> Book.objects.aggregate(Min(’price’)){’price__min’: Decimal(’12’)}

aggregate() 方法返回的不再是 QuerySet 了,而是一個包含查詢結果的字典。如果我要對 QerySet 中每個元素都進行聚合計算、并且返回的仍然是 QuerySet ,那就要用到 annotate() 方法了。

annotate 翻譯過來就是 注解 ,它的作用有點像給 QuerySet 中的每個元素臨時貼上一個臨時的字段,字段的值是分組聚合運算的結果。

比方說要給查詢集中的每本書籍都增加一個字段,字段內容是外鏈到書籍的作者的數量:

>>> from django.db.models import Count>>> q = Book.objects.annotate(Count(’authors’))>>> q[0].authors__count3

與 aggregate() 的語法類似,也可以給這個字段自定義個名字:

>>> q = Book.objects.annotate(a_count=Count(’authors’))

跨外鏈查詢字段也是可以的:

>>> s = Store.objects.annotate(min_price=Min(’books__price’), max_price=Max(’books__price’))>>> s[0].min_priceDecimal(’12’)>>> s[0].max_priceDecimal(’44’)

既然 annotate() 返回的是查詢集,那么自然也可以和 filter() 、 exclude() 等查詢方法組合使用:

>>> b = Book.objects.filter(name__startswith='Django').annotate(num_authors=Count(’authors’))>>> b[0].num_authors4

聯用的時候 filter 、 annotate 的順序會影響返回結果,所以邏輯要想清楚。

也可以排序:

>>> Book.objects.annotate(num_authors=Count(’authors’)).order_by(’num_authors’)

總而言之, aggregate 和 annotate 用于組合查詢。當你需要對某些字段進行聚合操作時(比如Sum, Avg, Max),請使用 aggregate 。如果你想要對數據集先進行分組(Group By)然后再進行某些聚合操作或排序時,請使用 annotate 。

進行此類查詢有時候容易讓人迷惑,如果你對查詢的結果有任何的疑問,最好的方法就是直接查看它所執行的 SQL 原始語句,像這樣:

>>> b = Book.objects.annotate(num_authors=Count(’authors’)).order_by(’num_authors’)>>> print(b.query)SELECT 'aggregation_book'.'id', 'aggregation_book'.'name','aggregation_book'.'pages', 'aggregation_book'.'price','aggregation_book'.'rating', 'aggregation_book'.'publisher_id', 'aggregation_book'.'pubdate', COUNT('aggregation_book_authors'.'author_id') AS 'num_authors' FROM 'aggregation_book' LEFT OUTER JOIN 'aggregation_book_authors' ON ('aggregation_book'.'id' = 'aggregation_book_authors'.'book_id') GROUP BY 'aggregation_book'.'id', 'aggregation_book'.'name','aggregation_book'.'pages', 'aggregation_book'.'price','aggregation_book'.'rating', 'aggregation_book'.'publisher_id', 'aggregation_book'.'pubdate'ORDER BY 'num_authors' ASC

相關文檔: Aggregation

復合使用聚合時的相互干擾問題: Count and Sum annotations interfere with each other

總結

到此這篇關于Django中Aggregation聚合的基本使用方法就介紹到這了,更多相關Django Aggregation聚合使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲国产成人午夜在线一区| 亚洲天堂网中文字| 国产亚洲欧美激情| 国产一区二区精品久久91| 色综合久久久网| 亚洲黄色尤物视频| 国产精品hd| 日本一区二区免费在线| 欧美+日本+国产+在线a∨观看| 精品久久久久久亚洲综合网| 激情五月激情综合网| 色激情天天射综合网| 亚洲综合一二区| 国内精品嫩模av私拍在线观看| 久久亚洲欧美国产精品乐播 | 亚洲电影在线免费观看| 亚洲黄色精品| 亚洲视频一区二区在线| 伊人久久婷婷| 亚洲日本va在线观看| 尤物网精品视频| 亚洲视频一二区| 中日韩视频在线观看| 玉米视频成人免费看| 国产日产精品一区二区三区四区的观看方式 | 色综合色狠狠天天综合色| 久久综合久久99| 不卡的av网站| 国产婷婷色一区二区三区在线| 91麻豆swag| 国产三级三级三级精品8ⅰ区| 欧美日韩国产在线一区| 国产精品私人影院| 精品91免费| 亚洲欧美日韩国产一区二区三区| 日韩天堂av| 亚洲一区二区高清| 一本久久a久久免费精品不卡| 男人的j进女人的j一区| 欧美性猛交xxxx黑人交| 国产精品亚洲午夜一区二区三区| 日韩欧美中文字幕精品| av中文字幕亚洲| 久久五月婷婷丁香社区| 欧美激情一级片一区二区| 国产精品久久久久久久久果冻传媒 | 亚洲一区二三区| 老鸭窝毛片一区二区三区 | 成人sese在线| 国产精选一区二区三区| 日韩午夜激情av| 99久久伊人网影院| 国产精品天美传媒| 国产精品一区二区三区四区五区 | 久久精品欧美日韩| 国产精品黄色| 亚洲男人的天堂一区二区| 久久av一区二区三区| 偷拍亚洲欧洲综合| 精品视频在线免费看| 国产成人自拍网| 久久免费电影网| 亚洲国产一区二区三区高清| 亚洲va在线va天堂| 欧美三级韩国三级日本三斤| 国产成人亚洲综合色影视| 欧美mv日韩mv| 亚洲午夜黄色| 亚洲国产精品久久久久婷婷884| 久久蜜桃精品| 国产综合久久久久影院| 日韩免费观看高清完整版| 欧美88av| 亚洲电影中文字幕在线观看| 欧美色综合网站| 久久久久久久电影| 亚洲午夜极品| 天天爽夜夜爽夜夜爽精品视频| 日韩一级成人av| 亚洲欧洲精品一区二区三区波多野1战4| 日韩成人午夜精品| 欧美www视频| 日韩视频在线播放| 久久99九九99精品| 欧美亚洲网站| 国产suv精品一区二区883| 1区2区3区欧美| 精品视频1区2区| 国产精品二区在线观看| 美女脱光内衣内裤视频久久影院| 精品美女在线观看| 夜夜爽av福利精品导航 | 国产在线精品国自产拍免费| 国产精品久久久久9999吃药| 色婷婷久久综合| 欧美一区三区二区在线观看| 五月天久久比比资源色| 久久综合中文字幕| 久久国产手机看片| av电影天堂一区二区在线观看| 亚洲蜜桃精久久久久久久| 欧美一区二区三区四区五区| 亚洲精品1区2区| 激情综合五月婷婷| 亚洲三级在线播放| 欧美一区二区人人喊爽| 在线亚洲美日韩| 成人激情免费视频| 石原莉奈在线亚洲二区| 久久久影视传媒| 在线一区二区三区四区五区| 欧美午夜久久| 国产精品一级黄| 伊人开心综合网| 精品欧美乱码久久久久久1区2区| 久久久久久久久一区二区| 午夜久久tv| 国产伦精品一区二区三区在线观看| 亚洲乱码国产乱码精品精可以看| 欧美一级淫片007| 久久亚洲欧洲| 精品电影一区| av在线这里只有精品| 久久国产人妖系列| 亚洲人123区| 欧美变态凌虐bdsm| 在线亚洲一区观看| 亚洲黄网站黄| 欧美一区网站| 成人做爰69片免费看网站| 日本不卡一二三区黄网| 亚洲精品乱码久久久久久黑人| 精品国产免费视频| 欧美精品电影在线播放| 久久都是精品| 黑人一区二区三区四区五区| 粉嫩av亚洲一区二区图片| 奇米一区二区三区av| 一区二区三区国产精华| 久久在线免费观看| 欧美三级在线视频| 男人的天堂亚洲| 亚洲精品一区二区三区蜜桃久| 91免费看`日韩一区二区| 国产在线精品不卡| 蜜桃视频第一区免费观看| 一区二区欧美精品| 国产精品久久久久精k8| 国产性做久久久久久| 91精品久久久久久久99蜜桃| 久久在线视频| 中文精品视频| 亚洲国产高清视频| 91免费观看视频| 成人午夜免费电影| 精品亚洲成av人在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲四区在线观看| 国产精品欧美一级免费| 久久久久久一二三区| 精品国产伦一区二区三区观看方式 | 欧美va亚洲va| 欧美一级理论性理论a| 欧亚洲嫩模精品一区三区| 亚洲尤物在线| 国产日韩一区二区| 亚洲精品国产日韩| 亚洲午夜极品| 亚洲五月婷婷| 影音先锋在线一区| 亚洲小说欧美另类社区| 欧美日韩蜜桃| 国产一区再线| 亚洲网址在线| 亚洲二区视频| 在线高清一区| 亚洲电影成人| av成人激情| 99视频一区| 国产精品亚洲产品| 免费在线亚洲欧美| 久久免费国产| 欧美性猛交xxxx乱大交退制版 | 国产精品美女视频| 欧美国产成人在线| 国产精品入口麻豆九色| 国产精品日韩成人| 亚洲欧美日韩久久| 亚洲成人av福利| 青青国产91久久久久久| 久久99精品久久久久婷婷| 国产麻豆视频一区| 成人不卡免费av| 91免费版在线| 国产精品国产一区二区| 亚洲人成毛片在线播放女女| 国产嫩草一区二区三区在线观看 | 色综合天天综合狠狠| 欧美日韩综合另类| 99成人在线|