最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django 聚合函數(shù)的具體使用

 更新時間:2021年05月19日 14:17:48   作者:Silent丿丶黑羽  
orm模型中的聚合函數(shù)跟MySQL中的聚合函數(shù)作用是一致的,也有像Sum、Avg、Count、Max、Min,接下來我們逐個介紹,下面就一起來了解一下

前言

orm模型中的聚合函數(shù)跟MySQL中的聚合函數(shù)作用是一致的,也有像Sum、Avg、Count、Max、Min,接下來我們逐個介紹

聚合函數(shù)

所有的聚合函數(shù)都是放在django.db.models下面。并且聚合函數(shù)不能夠單獨的執(zhí)行,聚合函數(shù)是通過aggregate方法來實現(xiàn)的。在說明聚合函數(shù)的用法的時候,都是基于以下的模型對象來實現(xiàn)的。

class Author(models.Model):
     """作者模型"""
     name = models.CharField(max_length=100)
     age = models.IntegerField()
     email = models.EmailField()

     class Meta:
         db_table = 'author'


 class Publisher(models.Model):
     """出版社模型"""
     name = models.CharField(max_length=300)

     class Meta:
         db_table = 'publisher'


 class Book(models.Model):
     """圖書模型"""
     name = models.CharField(max_length=300)
     pages = models.IntegerField()
     price = models.FloatField()
     rating = models.FloatField()
     author = models.ForeignKey(Author,on_delete=models.CASCADE)
     publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

     class Meta:
         db_table = 'book'


 class BookOrder(models.Model):
     """圖書訂單模型"""
     book = models.ForeignKey("Book",on_delete=models.CASCADE)
     price = models.FloatField()

     class Meta:
         db_table = 'book_order'

Avg

Avg:求平均值。比如想要獲取所有圖書的價格平均值。那么可以使用以下代碼實現(xiàn)。

 from django.db.models import Avg
 result = Book.objects.aggregate(Avg('price'))
 print(result)

以上的打印結(jié)果是:

 {"price__avg":23.0}

其中price__avg的結(jié)構(gòu)是根據(jù)field__avg規(guī)則構(gòu)成的。如果想要修改默認的名字,那么可以將Avg賦值給一個關(guān)鍵字參數(shù)。示例代碼如下:

 from django.db.models import Avg
 result = Book.objects.aggregate(my_avg=Avg('price'))
 print(result)

以上的打印結(jié)果為

 {"my_avg":23} 

Count

Count:獲取指定的對象的個數(shù)。示例代碼如下:

 from django.db.models import Count
 result = Book.objects.aggregate(book_num=Count('id'))

以上的result將返回Book表中總共有多少本圖書。

Count類中,還有另外一個參數(shù)叫做distinct,默認是等于False,如果是等于True,那么將去掉那些重復(fù)的值。比如要獲取作者表中所有的不重復(fù)的郵箱總共有多少個,那么可以通過以下代碼來實現(xiàn):

from djang.db.models import Count
result = Author.objects.aggregate(count=Count('email',distinct=True))

Max和Min

Max和Min:獲取指定對象的最大值和最小值。比如想要獲取Author表中,最大的年齡和最小的年齡分別是多少。那么可以通過以下代碼來實現(xiàn):

from django.db.models import Max,Min
result = Author.objects.aggregate(Max('age'),Min('age'))

如果最大的年齡是90,最小的年齡是10。那么以上的result將為:

{"age__max":90,"age__min":10}

Sum

Sum:求指定對象的總和。比如要求圖書的銷售總額。那么可以使用以下代碼實現(xiàn):

from djang.db.models import Sum
result = Book.objects.annotate(total=Sum("bookorder__price"))

以上的代碼annotate的意思是給Book表在查詢的時候添加一個字段叫做total,這個字段的數(shù)據(jù)來源是從BookOrder模型的price的總和而來。 

aggregate和annotate的區(qū)別

相同點:這兩個方法都可以執(zhí)行聚合函數(shù)。

不同點:

  • aggregate返回的是一個字典,在這個字典中存儲的是這個聚合函數(shù)執(zhí)行的結(jié)果。而annotate返回的是一個QuerySet對象,并且會在查找的模型上添加一個聚合函數(shù)的屬性。
  • aggregate不會做分組,而annotate會使用group by子句進行分組,只有調(diào)用了group by子句,才能對每一條數(shù)據(jù)求聚合函數(shù)的值。

F表達式:

F表達式: 動態(tài)的獲取某個字段上的值。并且這個F表達式,不會真正的去數(shù)據(jù)庫中查詢數(shù)據(jù),他相當于只是起一個標識的作用。比如想要將原來每本圖書的價格都在原來的基礎(chǔ)之上增加10元,那么可以使用以下代碼來實現(xiàn):

from django.db.models import F
Book.objects.update(price=F("price")+10) 

Q表達式

Q表達式:使用Q表達式包裹查詢條件,可以在條件之間進行多種操作。與/或非等,從而實現(xiàn)一些復(fù)雜的查詢操作。例子如下:

查找價格大于100,并且評分達到4.85以上的圖書:

  # 不使用Q表達式的
  books = Book.objects.filter(price__gte=100,rating__gte=4.85)
  # 使用Q表達式的
  books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))

查找價格低于100元,或者評分低于4分的圖書:

books = Book.objects.filter(Q(price__gte=100)&Q(rating__gte=4.85))

獲取價格大于100,并且圖書名字中不包含”傳“字的圖書:

books = Book.objects.filter(Q(price__gte=100)&~Q(name__icontains='傳'))

到此這篇關(guān)于Django 聚合函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)Django 聚合函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django RBAC權(quán)限管理設(shè)計過程詳解

    Django RBAC權(quán)限管理設(shè)計過程詳解

    這篇文章主要介紹了Django RBAC權(quán)限管理設(shè)計過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python 過濾錯誤log并導(dǎo)出的實例

    Python 過濾錯誤log并導(dǎo)出的實例

    今天小編就為大家分享一篇Python 過濾錯誤log并導(dǎo)出的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python 通過exifread讀取照片信息

    python 通過exifread讀取照片信息

    這篇文章主要介紹了python 如何通過exifread讀取照片信息,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python hook監(jiān)聽事件詳解

    python hook監(jiān)聽事件詳解

    這篇文章主要為大家詳細介紹了python hook監(jiān)聽事件的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 解決tensorflow打印tensor有省略號的問題

    解決tensorflow打印tensor有省略號的問題

    今天小編就為大家分享一篇解決tensorflow打印tensor有省略號的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python-docx 實現(xiàn)整體修改或者部分修改文字的大小和字體類型

    Python-docx 實現(xiàn)整體修改或者部分修改文字的大小和字體類型

    這篇文章主要介紹了Python-docx 實現(xiàn)整體修改或者部分修改文字的大小和字體類型,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 編寫Python CGI腳本的教程

    編寫Python CGI腳本的教程

    這篇文章主要介紹了編寫Python CGI腳本的教程,CGI是Python和服務(wù)器軟件連接的接口,需要的朋友可以參考下
    2015-06-06
  • Python枚舉之Enum模塊的原理與應(yīng)用詳解

    Python枚舉之Enum模塊的原理與應(yīng)用詳解

    前段時間在閱讀別人的代碼時,看到代碼中有好多數(shù)字,雖然增加的注釋,哪個值代表哪種狀態(tài),但還是看起來很難受,不優(yōu)雅,如何改善這個問題呢?當然是枚舉,本文將深入探討Python枚舉中的Enum模塊,需要的朋友可以參考下
    2023-11-11
  • 如何使用Python?VTK繪制線條

    如何使用Python?VTK繪制線條

    這篇文章主要介紹了如何使用Python-VTK繪制線條,主要繪制直線和曲線,下面文章詳細實現(xiàn)過程需要的小伙伴可以參考一下
    2022-04-04
  • python實現(xiàn)串口通信的示例代碼

    python實現(xiàn)串口通信的示例代碼

    python實現(xiàn)串口通信是一件簡單的事情,只要通過pyserial模塊就可以實現(xiàn),本文主要介紹了python實現(xiàn)串口通信的示例代碼,感興趣的可以了解一下
    2023-10-10

最新評論

攀枝花市| 苍溪县| 兰西县| 香河县| 渭源县| 泌阳县| 宜兰县| 正定县| 乌兰察布市| 厦门市| 南丰县| 当涂县| 建昌县| 故城县| 厦门市| 双辽市| 营山县| 和龙市| 客服| 乐至县| 明溪县| 甘洛县| 宁阳县| 额济纳旗| 咸丰县| 石楼县| 台山市| 建昌县| 兴安县| 马山县| 高阳县| 五指山市| 宜丰县| 黔西县| 齐齐哈尔市| 乌拉特中旗| 石棉县| 明星| 大同市| 池州市| 弥渡县|