Django ORM 查詢集介紹

2021-10-14 16:31:44 字數 1848 閱讀 7843

django的orm中存在查詢集的概念。

查詢集,也稱查詢結果集、queryset,表示從資料庫中獲取的物件集合。

當呼叫如下過濾器方法時,django會返回查詢集(而不是簡單的列表):

對查詢集可以再次呼叫過濾器進行過濾,如

bookinfo.objects.

filter

(bread__gt=30)

.order_by(

'bpub_date'

)

也就意味著查詢集可以含有零個、乙個或多個過濾器。過濾器基於所給的引數限制查詢的結果。

從sql的角度講,查詢集與select語句等價,過濾器像where、limit、order by子句。

判斷某乙個查詢集中是否有資料:

1)惰性執行

建立查詢集不會訪問資料庫,直到呼叫資料時,才會訪問資料庫,呼叫資料的情況包括迭代、序列化、與if合用

例如,當執行如下語句時,並未進行資料庫查詢,只是建立了乙個查詢集qs

qs = bookinfo.objects.

all(

)

繼續執行遍歷迭代操作後,才真正的進行了資料庫的查詢

for book in qs:

print

(book.btitle)

2)快取

使用同乙個查詢集,第一次使用時會發生資料庫的查詢,然後django會把結果快取下來,再次使用這個查詢集時會使用快取的資料,減少了資料庫的查詢次數。

情況一:如下是兩個查詢集,無法重用快取,每次查詢都會與資料庫進行一次互動,增加了資料庫的負載。

情況二:經過儲存後,可以重用查詢集,第二次使用快取中的資料。

可以對查詢集進行取下標或切片操作,等同於sql中的limit和offset子句。

注意:不支援負數索引。

對查詢集進行切片後返回乙個新的查詢集,不會立即執行查詢。

如果獲取乙個物件,直接使用[0],等同於[0:1].get(),但是如果沒有資料,[0]引發indexerror異常,[0:1].get()如果沒有資料引發doesnotexist異常。

示例:獲取第1、2項,執行檢視。

qs = bookinfo.objects.

all()[

0:2]

django orm 查詢語句

model.objects.all 獲取所有物件的queryset model.objects.filter 獲取滿足條件的物件的queryset model.objects.exclude 獲取不滿足條件的物件的queryset model.objects.get 獲取單個符合條件的物件的quer...

Django ORM分組查詢

關鍵字 annotate models後面 什麼就是按什麼分組 eg models.book.objects.annotate 這裡就是按照書籍表每本書來分組 示例 統計每本書的作者數量 res models.book.objects.annotate author num count author...

Django ORM模型Field介紹及外來鍵使用

常用字段 在django中,定義了一些field來與資料庫表中的字段型別來進行對映。autofield 對映到資料庫中的int型別,可以有自動增長的特性。一般不需要使用這個型別,如果不指定主鍵,那麼模型會自動的生成乙個叫做id的自動增長的主鍵。bigautofield 64位的整型,類似於autof...