Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢
文章目錄
一. 查詢函式(get,filter,exclude)
通過模型類 .objects
屬性可以呼叫如下函式,實現對模型類對應的資料表的查詢。
函式名 | 功能 | 返回值 | 說明 |
---|---|---|---|
get | 返回表中滿足條件的一條且只能有一條資料。 | 返回值是一個模型類物件。 | 引數中寫查詢條件。1) 如果查到多條資料,則拋異常MultipleObjectsReturned。2) 查詢不到資料,則拋異常:DoesNotExist。 |
all | 返回模型類對應表格中的所有資料。 | 返回值是QuerySet型別 | 查詢集 |
filter | 返回滿足條件的資料。 | 返回值是QuerySet型別 | 引數寫查詢條件。 |
exclude | 返回不滿足條件的資料。 | 返回值是QuerySet型別 | 引數寫查詢條件。 |
order_by | 對查詢結果進行排序。 | 返回值是QuerySet型別 | 引數中寫根據哪些欄位進行排序。 |
·
a)判等 條件名:exact。
例:查詢編號為1的圖書。
BookInfo.objects.get(id=1)
b)模糊查詢
例:查詢書名包含’傳’的圖書。contains
BookInfo.objects.filter(btitle__contains='傳')
例:查詢書名以’部’結尾的圖書 endswith 開頭:startswith
BookInfo.objects.filter(btitle__endswith='部')
c)空查詢 isnull
例:查詢書名不為空的圖書。isnull
select * from booktest_bookinfo where btitle is not null;
BookInfo.objects.filter(btitle__isnull=False)
d)範圍查詢 in
例:查詢id為1或3或5的圖書。
select * from booktest_bookinfo where id in (1,3,5);
BookInfo.objects.filter(id__in = [1,3,5])
e)比較查詢 gt(greate than) lt(less than) gte(equal) 大於等於lte 小於等於
例:查詢id大於3的圖書。
Select * from booktest_bookinfo where id>3;
BookInfo.objects.filter(id__gt=3)
f)日期查詢
例:查詢1980年發表的圖書。
BookInfo.objects.filter(bpub_date__year=1980)
例:查詢1980年1月1日後發表的圖書。
from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))
exclude方法示例:
例:查詢id不為3的圖書資訊。
BookInfo.objects.exclude(id=3)
order_by方法示例:
作用:進行查詢結果進行排序。
例:查詢所有圖書的資訊,按照id從小到大進行排序。
BookInfo.objects.all().order_by('id')
例:查詢所有圖書的資訊,按照id從大到小進行排序。
BookInfo.objects.all().order_by('-id')
例:把id大於3的圖書資訊按閱讀量從大到小排序顯示。
BookInfo.objects.filter(id__gt=3).order_by('-bread')
F物件(作用:用於類屬性之間的比較。)
使用之前需要先匯入:
from django.db.models import F
例:查詢圖書閱讀量大於評論量圖書資訊。
BookInfo.objects.filter(bread__gt=F('bcomment'))
例:查詢圖書閱讀量大於2倍評論量圖書資訊。
BookInfo.objects.filter(bread__gt=F('bcomment')*2)
Q物件(作用:用於查詢時條件之間的邏輯關係。not and or,可以對Q物件進行&|~操作。)
使用之前需要先匯入:
from django.db.models import Q
例:查詢id大於3且閱讀量大於30的圖書的資訊。
BookInfo.objects.filter(id__gt=3, bread__gt=30)
BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30))
例:查詢id大於3或者閱讀量大於30的圖書的資訊。
BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))
例:查詢id不等於3圖書的資訊。
BookInfo.objects.filter(~Q(id=3))
聚合函式 (作用:對查詢結果進行聚合操作。)
sum count avg max min
aggregate
:呼叫這個函式來使用聚合。 返回值是一個字典
使用前需先匯入聚合類:
from django.db.models import Sum,Count,Max,Min,Avg
例:查詢所有圖書的數目。
BookInfo.objects.all().aggregate(Count('id'))
{'id__count': 5}
例:查詢所有圖書閱讀量的總和。
BookInfo.objects.aggregate(Sum('bread'))
{'bread__sum': 126}
count函式 返回值是一個數字(作用:統計滿足條件資料的數目。)
例:統計所有圖書的數目。
BookInfo.objects.all().count()
BookInfo.objects.count()
例:統計id大於3的所有圖書的數目。
BookInfo.objects.filter(id__gt=3).count()
小結:
二. 查詢集
all, filter, exclude, order_by
呼叫這些函式會產生一個查詢集,QuerySet
類物件可以繼續呼叫上面的所有函式。
查詢集特性
1)惰性查詢:只有在實際使用查詢集中的資料的時候才會發生對資料庫的真正查詢。
2)快取:當使用的是同一個查詢集時,第一次的時候會發生實際資料庫的查詢,然後把結果快取起來,之後再使用這個查詢集時,使用的是快取中的結果。
限制查詢集
可以對一個查詢集進行取下標或者切片操作來限制查詢集的結果。
對一個查詢集進行切片操作會產生一個新的查詢集,下標不允許為負數。
取出查詢集第一條資料的兩種方式:
方式 | 說明 |
---|---|
b[0] | 如果b[0]不存在,會丟擲IndexError異常 |
b[0:1].get() | 如果b[0:1].get()不存在,會丟擲DoesNotExist異常。 |
exists
:判斷一個查詢集中是否有資料。 True False
·
三. 關聯查詢(一對多)
查詢和物件關聯的資料
在一對多關係中,一對應的類我們把它叫做一類,多對應的那個類我們把它叫做多類,我們把多類中定義的建立關聯的類屬性叫做關聯屬性。
例:查詢id為1的圖書關聯的英雄的資訊。
b=BookInfo.objects.get(id=1)
b.heroinfo_set.all()
通過模型類查詢:
HeroInfo.objects.filter(hbook__id=1)
例:查詢id為1的英雄關聯的圖書資訊。
h = HeroInfo.objects.get(id=1)
h.hbook
通過模型類查詢:
BookInfo.objects.filter(heroinfo__id=1)
格式:
由一類的物件查詢多類的時候:
一類的物件.多類名小寫_set.all() #查詢所用資料
由多類的物件查詢一類的時候:
多類的物件.關聯屬性 #查詢多類的物件對應的一類的物件
由多類的物件查詢一類物件的id時候:
多類的物件.關聯屬性_id
通過模型類實現關聯查詢
例:查詢圖書資訊,要求圖書關聯的英雄的描述包含’八’。
BookInfo.objects.filter(heroinfo__hcomment__contains='八')
例:查詢圖書資訊,要求圖書中的英雄的id大於3.
BookInfo.objects.filter(heroinfo__id__gt=3)
例:查詢書名為“天龍八部”的所有英雄。
HeroInfo.objects.filter(hbook__btitle='天龍八部')
通過多類的條件查詢一類的資料:
一類名.objects.filter(多類名小寫__多類屬性名__條件名)
通過一類的條件查詢多類的資料:
多類名.objects.filter(關聯屬性__一類屬性名__條件名)
相關文章
- django對資料庫查詢基本方法Django資料庫
- 20240719資料庫關聯查詢、條件查詢資料庫
- 區分關聯子查詢和非關聯子查詢
- day95:flask:SQLAlchemy資料庫查詢進階&關聯查詢FlaskSQL資料庫
- sqlalchemy在python中的使用(關於查詢)二SQLPython
- Django中views資料查詢使用locals()函式進行優化DjangoView函式優化
- 在Django中查詢重複專案Django
- Django-ORM---查詢集介紹DjangoORM
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- 關於Oracle資料庫的時間查詢Oracle資料庫
- 使用Django annotation,提升django查詢效能Django
- mysql中的多表關聯查詢MySql
- Laravel ORM 中,根據關聯查詢的欄位值,對主查詢排名LaravelORM
- hyperf關聯子表查詢主表資料
- Mongodb 關聯表查詢MongoDB
- JPA多表關聯查詢
- 資料庫高階查詢之子查詢資料庫
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- 多個異構資料庫如何關聯查詢資料庫
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 關於dataguard需要查詢的資料字典
- Solr複雜查詢一:函式查詢Solr函式
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- java 分庫關聯查詢工具類Java
- 海關資料查詢系統「查詢平臺分類」
- Django:查詢基礎語法Django
- Django-ORM 之查詢排序DjangoORM排序
- 關於dcat-admin 資料庫過濾查詢資料庫
- SQL查詢的:子查詢和多表查詢SQL
- 資料庫基礎查詢--單表查詢資料庫
- 關於資料庫查詢業務的幾點思考資料庫
- 如何在Django ORM中進行not查詢?DjangoORM
- mysql 三表關聯查詢MySql
- mysql三表關聯查詢MySql
- laravel 模型關聯查詢的 belongsToManyLaravel模型
- Elasticsearch中的Term查詢和全文查詢Elasticsearch
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫