什么是django QuerySet?

gat*_*ath 39 django django-queryset

当我这样做

>>> b = Blog.objects.all()
>>> b
Run Code Online (Sandbox Code Playgroud)

我明白了

>>>[<Blog: Blog Title>,<Blog: Blog Tile>]
Run Code Online (Sandbox Code Playgroud)

当我查询b是什么类型时,

>>> type(b)
Run Code Online (Sandbox Code Playgroud)

我明白了

>>> <class 'django.db.models.query.QuerySet'>
Run Code Online (Sandbox Code Playgroud)

这是什么意思?它是像dict,list等数据类型吗?

我将如何构建像QuerySet这样的数据结构的示例.

我想知道django如何构建QuerySet(血腥细节)

迦特.

Ber*_*ant 42

一个django查询集就像它的名字所说的那样,基本上是(sql)查询的集合,在上面的例子print(b.query)中将显示你的django filter调用生成的sql查询.

由于查询集是惰性的,因此数据库查询不会立即完成,而是仅在需要时 - 在评估查询集时完成.例如,如果你__str__打印它时调用它的方法,如果你要调用list()它,或者,大多数情况下你会迭代它(for post in b..),就会发生这种情况.这种懒惰应该可以帮助您避免执行不必要的查询,并且还允许您链接查询集和过滤器(您可以根据需要随时过滤查询集).


Ign*_*ams 17

是的,它只是另一种类型,与其他类型一样.

  • 仅链接答案?这应该是一个很大的禁忌…… (12认同)

小智 5

QuerySet表示数据库中对象的集合。它可以有零个,一个或多个过滤器。过滤器根据给定的参数缩小查询结果的范围。用SQL术语来说,QuerySet等同于SELECT语句,而过滤器是一个限制子句,例如WHERE或LIMIT。

https://docs.djangoproject.com/zh-CN/1.8/topics/db/queries/