當查詢結果是多個的時候,django ORM會返回一個 查詢集(QuerySet) ,表示從資料庫中獲取對象的 集合 。 查詢集可以使用過濾器進行再次處理。 例如查詢閱讀量大於20且評論數大於30的書 因為查詢集類似一個集合,所以可以對查詢集進行取下標或者切片等操作(索引不支持負數)。 查詢閱讀數大 ...
當查詢結果是多個的時候,django-ORM會返回一個 查詢集(QuerySet) ,表示從資料庫中獲取對象的 集合 。
查詢集可以使用過濾器進行再次處理。
例如查詢閱讀量大於20且評論數大於30的書
>>> book = Book.objects.filter(b_read__gt=20)
>>> book.filter(b_comment__gt=30)
<QuerySet [<Book: 天龍八部>]>
因為查詢集類似一個集合,所以可以對查詢集進行取下標或者切片等操作(索引不支持負數)。
查詢閱讀數大於20的結果,再取下標為1 的數據。
>>> book = Book.objects.filter(b_read__gt=20)
>>> book[1]
<Book: 雪山飛狐>
查詢集兩大特性
1. 惰性執行
創建查詢集不會訪問資料庫,直到調用數據時,才會訪問資料庫,調用數據的情況包括迭代、序列化、與if合用
2. 緩存
使用同一個查詢集,第一次使用時會發生資料庫的查詢,然後Django會把結果緩存下來,再次使用這個查詢集時會使用緩存的數據,減少了資料庫的查詢次數。