在文章【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 查詢過濾器在這裡的存在就是...