Django入門 查詢集QuerySet介紹

2021-10-08 13:06:32 字數 1545 閱讀 5234

在文章【django入門】——通過模型類查詢mysql資料庫基本操作中,我們知道函式all()filter()exclude()order_by()等的返回值都是queryset型別,對該型別的返回值可以繼續使用上述查詢函式。queryset型別具有一些特性:

在使用返回值型別為queryset的函式進行查詢時,即使得到了queryset型別的返回值,也並不意味著此時通過模型類完成了對資料庫的查詢操作,只有當使用查詢集中的資料時,才會真正完成對資料庫的查詢操作。也就是說,對於下述**,在# 1處,並不會產生對資料庫的實際查詢,只有到# 2處,才會發生資料庫查詢。

>>> from booktest.models import bookinfo

>>> books = bookinfo.objects.all(

)# 1

>>> books # 2

[(1)>,

(2)>,

(3)>,

(4)>]>

所謂查詢快取是指,當使用的同乙個查詢集時,第一次使用時會發生資料庫的實際查詢,然後查詢結果會被快取起來,之後再使用這個查詢集時,使用的只是快取中的結果,而不會發生重複的查詢。即對於下列案例,在# 1處不會發生實際的資料庫查詢,只有在# 2處會發生查詢,且# 3處由於使用了和# 2處相同的查詢集,則# 3處直接使用經# 2查詢出來的資料集。

>>> books = bookinfo.objects.all(

)# 1

>>> [_ for _ in books]

# 2[

(1)>,

(2)>,

(3)>,

(4)>]

>>> [_ for _ in books]

# 3[

(1)>,

(2)>,

(3)>,

(4)>]

查詢集具有和python中列表和元組類似,支援切片功能,語法也基本一致:queryset[start:end:step],但是需要注意的是,查詢集的下標不予許為負。

最後補充一點,有時候如果查詢集中資料為空,那麼對該查詢集進一步操作則會產生異常,則**中需要進行異常處理,而查詢集支援乙個exist()函式,可以判斷其是否為空,若不為空返回true,否則返回false

>>> books = bookinfo.objects.all(

)>>> books.exists(

)true

>>> books[0:0]

.exists(

)false

Django框架學習 入門 查詢集(2 4)

查詢集表示從資料庫中獲取的物件集合,在管理器上呼叫某些過濾器方法會返回查詢集,查詢集可以含有零個 乙個或多個過濾器。過濾器基於所給的引數限制查詢的結果,從sql的角度,查詢集和select語句等價,過濾器像where和limit子句。返回查詢集的過濾器如下 返回單個值的過濾器如下 count 返回當...

django實戰 查詢(二)查詢集

查詢集表示從資料庫中獲取的物件集合,在管理器上呼叫某些過濾器方法會返回查詢集,查詢集可以含有零個 乙個或多個過濾器。過濾器基於所給的引數限制查詢的結果,從sql的角度,查詢集和select語句等價,過濾器像where和limit子句。返回查詢集的過濾器如下 返回單個值的過濾器如下 count 返回當...

django 資料庫的查詢集

1.curd 增刪改查 對於資料庫,作為一名開發人員並不會感到陌生,那麼資料庫中的查詢集是怎麼一回事呢?2.資料庫的查詢集 對查詢集可以再次呼叫過濾器進行過濾,如 bookinfo.objects.filter bread gt 30 order by bpub date 查詢過濾器在這裡的存在就是...