Django 聚合函數 和 排序函數,關聯查詢

一下介紹的數據和字段 都在此文中進行的 創建和添加 https://blog.csdn.net/weixin_44685869/article/details/105368727

1. 聚合函數

使用aggregate()過濾器調用聚合函數。聚合函數包括:Avg平均,Count數量,Max最大,Min最小,Sum求和,被定義在django.db.models中。

  • 例:查詢圖書的總閱讀量。

    from django.db.models import Sum
    BookInfo.objects.aggregate(Sum('readcount'))
    
    {'readcount__sum': 126}
    

注意aggregate的返回值是一個字典類型,格式如下:

{'屬性名__聚合類小寫':}

如:{‘readcount__sum’: 126}

使用count 時一般不使用aggregate()過濾器。

  • 例:查詢圖書總數。

    BookInfo.objects.count()
    

注意count函數的返回值是一個數字。

2. 排序

使用order_by對結果進行排序

# 默認升序

BookInfo.objects.all().order_by('readcount')

<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 笑傲江湖>, <BookInfo: 天龍八部>, <BookInfo: 雪山飛狐>]>
# 降序

BookInfo.objects.all().order_by('-readcount')
<QuerySet [<BookInfo: 雪山飛狐>, <BookInfo: 天龍八部>, <BookInfo: 笑傲江湖>, <BookInfo: 射鵰英雄傳>]>



關聯查詢

查詢書籍爲1的所有人物信息
查詢人物爲1的書籍信息

  • 由一到多的訪問語法:

    一對應的模型類對象.多對應的模型類名小寫_set 例:

    book = BookInfo.objects.get(id=1)
    book.peopleinfo_set.all()
    
    <QuerySet [<PeopleInfo: 郭靖>, <PeopleInfo: 黃蓉>, <PeopleInfo: 黃藥師>, <PeopleInfo: 歐陽鋒>, <PeopleInfo: 梅超風>]>
    
  • 由多到一的訪問語法:

    多對應的模型類對象.多對應的模型類中的關係類屬性名 例:

    person = PeopleInfo.objects.get(id=1)
    person.book
    
    <BookInfo: 射鵰英雄傳>
    

訪問一對應的模型類關聯對象的id語法:

多對應的模型類對象.關聯類屬性_id

  • 例:

    person = PeopleInfo.objects.get(id=1)
    person.book_id
    
    1
    

關聯過濾查詢

由多模型類條件查詢一模型類數據:

語法如下:

關聯模型類名小寫__屬性名__條件運算符=值

注意:如果沒有"__運算符"部分,表示等於。

查詢圖書,要求圖書人物爲"郭靖"
查詢圖書,要求圖書中人物的描述包含"八"

  • 例:查詢圖書,要求圖書人物爲"郭靖"

    book = BookInfo.objects.filter(peopleinfo__name='郭靖')
    book
    
    <QuerySet [<BookInfo: 射鵰英雄傳>]>
    
  • 查詢圖書,要求圖書中人物的描述包含"八"

    book = BookInfo.objects.filter(peopleinfo__description__contains='八')
    book
    
    <QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 天龍八部>]>
    
由一模型類條件查詢多模型類數據:

語法如下:

一模型類關聯屬性名__一模型類屬性名__條件運算符=值

注意:如果沒有"__運算符"部分,表示等於。

查詢書名爲“天龍八部”的所有人物
查詢圖書閱讀量大於30的所有人物

  • 例:查詢書名爲“天龍八部”的所有人物。

    people = PeopleInfo.objects.filter(book__name='天龍八部')
    people
    
    <QuerySet [<PeopleInfo: 喬峯>, <PeopleInfo: 段譽>, <PeopleInfo: 虛竹>, <PeopleInfo: 王語嫣>]>
    
  • 查詢圖書閱讀量大於30的所有人物

    people = PeopleInfo.objects.filter(book__readcount__gt=30)
    people
    
    <QuerySet [<PeopleInfo: 喬峯>, <PeopleInfo: 段譽>, <PeopleInfo: 虛竹>, <PeopleInfo: 王語嫣>, <PeopleIn
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章