日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

提高數(shù)據(jù)庫查詢效率可以通過原生 SQL 語句來實(shí)現(xiàn),但是它的缺點(diǎn)就是需要開發(fā)者熟練掌握 SQL。倘若查詢條件是動(dòng)態(tài)變化的,則編寫 SQL 會(huì)更加困難。

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

聚合最好的例子就是官網(wǎng)給的案例了:

# 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)

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

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

實(shí)際上可以省掉 all() :

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

還可以指定返回的鍵名:

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

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

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

獲取所有書籍中的最低價(jià)格:

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

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

annotate 翻譯過來就是 注解 ,它的作用有點(diǎn)像給 QuerySet 中的每個(gè)元素臨時(shí)貼上一個(gè)臨時(shí)的字段,字段的值是分組聚合運(yùn)算的結(jié)果。

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

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

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

>>> 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

聯(lián)用的時(shí)候 filter 、 annotate 的順序會(huì)影響返回結(jié)果,所以邏輯要想清楚。

也可以排序:

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

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

進(jìn)行此類查詢有時(shí)候容易讓人迷惑,如果你對查詢的結(jié)果有任何的疑問,最好的方法就是直接查看它所執(zhí)行的 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

相關(guān)文檔: Aggregation

復(fù)合使用聚合時(shí)的相互干擾問題: Count and Sum annotations interfere with each other

總結(jié)

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

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲资源网站| 麻豆国产在线| 国产欧洲在线| 国产中文欧美日韩在线| 日韩av专区| 99视频精品全部免费在线视频| 日韩精品麻豆| 亚洲深深色噜噜狠狠爱网站 | 麻豆mv在线观看| 亚洲成人不卡| 伊人久久大香线蕉av不卡| 97精品国产99久久久久久免费| 久久精品99国产精品| 欧美日韩在线二区| 日韩午夜在线| 欧美韩日一区| 91精品国产调教在线观看| 宅男噜噜噜66国产日韩在线观看| 中文视频一区| 欧美日韩在线精品一区二区三区激情综合| 欧美国产精品| 亚洲一区欧美激情| 午夜日韩在线| 国产精品麻豆久久| 99久久www免费| 亚洲久草在线| 国产高清日韩| 最新日韩欧美| 日本精品国产| 伊人久久亚洲美女图片| 亚洲精品欧洲| 婷婷亚洲综合| 精品九九在线| 亚洲欧美久久精品| 国产精品毛片视频| 成人羞羞视频播放网站| 亚洲视频电影在线| 国产精品白浆| 婷婷亚洲五月| 久久精品国产免费| 国产精品美女久久久| 久久精品国产福利| 中文字幕日韩欧美精品高清在线| 国产精品国产三级在线观看| 今天的高清视频免费播放成人| 国产探花一区| 狠狠干综合网| 久久精品国产亚洲一区二区三区| 91久久黄色| 国产a亚洲精品| 日韩三级精品| 婷婷六月综合| 国产精品hd| 亚洲乱码一区| 精品一区亚洲| 国产一区国产二区国产三区| 蜜臀91精品一区二区三区| 欧美亚洲国产激情| 国产探花一区在线观看| 国产精品日本| 秋霞影院一区二区三区| 69精品国产久热在线观看| 欧美女激情福利| 91看片一区| 久久永久免费| 久久激情五月婷婷| 日本大胆欧美人术艺术动态| 成年男女免费视频网站不卡| 欧美日韩亚洲一区三区| 久久国产88| 蜜桃久久av一区| 999久久久国产精品| 国产在线观看91一区二区三区| 日韩精品中文字幕吗一区二区| 红桃视频国产精品| 亚洲成人精品| 国产 日韩 欧美一区| 精品一区二区三区中文字幕| 日韩av午夜在线观看| 蜜芽一区二区三区| 亚洲欧美网站| 亚洲一区欧美二区| 久久天堂成人| 久久精品中文| 久草免费在线视频| 91亚洲一区| 精品久久97| 国产一区二区三区久久| 韩国女主播一区二区三区| 精品中文字幕一区二区三区| 国产精品白浆| 精品三区视频| 国产成人免费精品| 黑人精品一区| 色婷婷狠狠五月综合天色拍| 久久久一二三| 1024精品久久久久久久久| 色88888久久久久久影院| 青青久久av| 欧美成人午夜| 欧美日韩国产高清电影| 婷婷色综合网| 免费日韩精品中文字幕视频在线| 老司机精品久久| 视频精品一区| 国产精品久久免费视频| 国产成年精品| 久久人人88| 宅男噜噜噜66国产日韩在线观看| 亚洲欧美日韩国产综合精品二区 | 免费在线观看日韩欧美| 免费国产亚洲视频| 日韩av影院| 久久中文精品| 91tv亚洲精品香蕉国产一区| 五月婷婷亚洲| 中文字幕日本一区| 欧美亚洲综合视频| 麻豆视频在线看| 亚洲精品电影| 久久国产精品色av免费看| 精品一区不卡| 国产综合亚洲精品一区二| 午夜精品网站| 青青青国产精品| 91亚洲国产成人久久精品| 狠狠色综合网| 国产三级一区| 亚洲电影在线| 国产亚洲精aa在线看| 三上悠亚国产精品一区二区三区| 欧美日韩国产综合网| 日韩av在线播放中文字幕| 国产99在线| 亚洲深深色噜噜狠狠爱网站| 老鸭窝一区二区久久精品| 亚洲一级少妇| 欧美亚洲人成在线| 国产午夜久久av| 国产成人精品亚洲日本在线观看| 久久香蕉精品| 国产一区二区三区国产精品| 不卡一区2区| 国产精品久久久久久久久久齐齐| 久久久久久免费视频| 日韩综合一区二区| 精品美女视频| 欧美一级专区| 精品一区不卡| 水野朝阳av一区二区三区| 精品久久久久中文字幕小说| 91久久在线| 日韩av免费大片| 日韩精品一二区| 久久精品国产免费| 免费在线观看成人| 日本午夜大片a在线观看| 天堂精品久久久久| 欧美粗暴jizz性欧美20| 久久精品国产在热久久| 中文字幕av一区二区三区人| 九九色在线视频| 国产亚洲第一伦理第一区| 好看不卡的中文字幕| 精品久久网站| 少妇精品在线| 蜜臀久久99精品久久一区二区 | 亚洲一区二区三区免费在线观看 | 老鸭窝毛片一区二区三区| 精品日本视频| 亚洲精品九九| 亚洲精品小说| 日韩福利一区| 国产亚洲一卡2卡3卡4卡新区| 欧美91精品| 中文字幕成在线观看| 国产伦精品一区二区三区视频 | 欧美专区18| 免费日韩成人| 日本免费在线视频不卡一不卡二| 99re国产精品| 久久婷婷亚洲| 中文在线中文资源| 精品国产91| 国产精品宾馆| 国产毛片精品| 日韩成人精品一区二区三区| 宅男噜噜噜66国产日韩在线观看| 日韩毛片视频| 成人污污视频| 国产一区调教| 精品一区二区三区中文字幕视频| 91精品国产自产在线丝袜啪| 婷婷激情综合| 亚洲午夜黄色| 99精品视频在线| 999久久久91| 亚洲福利免费| 在线日韩一区| 免费久久精品|