2011-01-13 126 views
26

當我這樣做什麼是django QuerySet?

>>> b = Blog.objects.all() 
>>> b 

我得到這個

>>>[<Blog: Blog Title>,<Blog: Blog Tile>] 

當我詢問什麼類型B是

>>> type(b) 

我得到這個

>>> <class 'django.db.models.query.QuerySet'> 

是什麼這個意思?它是像字典,列表等數據類型?

我將讚賞我如何構建像QuerySet這樣的數據結構的例子。

我想知道Django是如何構建的QuerySet(血淋淋的細節)

迦特。

+1

你可以看一下Django的源代碼看到血淋淋的細節。除此之外,QuerySet只是一個像許多其他對象一樣的對象,有時候它會像列表一樣行爲。 – 2011-01-13 14:40:02

回答

25

一個django queryset就像它的名字一樣,基本的(SQL)查詢,在你上面的例子print b.query集合會告訴你從你的Django filter調用生成的SQL查詢。

由於查詢集是lazy,數據庫查詢不是立即完成的,但僅在需要時 - 當查詢集爲時,評估爲。例如,如果您在打印時調用__str__方法,如果您打電話給list(),或者主要發生了什麼,您可以重複執行該方法(for post in b..)。這種懶惰應該可以讓你避免做不必要的查詢,並且還允許你鏈接查詢集和過濾器(例如,你可以根據需要頻繁地過濾查詢集)。

1

QuerySet表示數據庫中的對象集合。它可以有零個,一個或多個過濾器。過濾器根據給定的參數縮小查詢結果的範圍。在SQL術語中,QuerySet等同於SELECT語句,過濾器是限制性子句,如WHERE或LIMIT。

https://docs.djangoproject.com/en/1.8/topics/db/queries/