一下介紹的數據和字段 都在此文中進行的 創建和添加 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