1. 程式人生 > >Django學習--查詢集QuerySet

Django學習--查詢集QuerySet

查詢結果集兩大特性 ==惰性== ==快取==

惰性

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

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

books = BookInfo.objects.all()

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

for book in books:
    print(book.name)

快取

我們將查詢結果集賦值給一個物件,每次都可以從物件裡獲取資料,只有第一次的時候,才會執行查詢資料庫操作,之後的獲取資料操作,都不會查詢資料庫

限制查詢集

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

注意:不支援負數索引。

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

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

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

>>> books = BookInfo.objects.all()[0:2]
>>> books
<QuerySet [<BookInfo: 射鵰英雄傳>, <BookInfo: 天龍八部>]>