python-Django查询集在for循环后成为列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Django查询集在for循环后成为列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1713字,纯文字阅读大概需要3分钟。
内容图文
![python-Django查询集在for循环后成为列表](/upload/InfoBanner/zyjiaocheng/681/3b4b800c6646470a921ef81227c731f6.jpg)
我在我的网站上使用的是django,问题很难分辨,请参见下面的代码.(python 2.7.10)
In [1]: user = User.objects.filter(pk__gt = 1)
In [2]: type(user)
Out[2]: django.db.models.query.QuerySet
In [3]: user1=user[0:user.count()]
In [4]: type(user1)
Out[4]: django.db.models.query.QuerySet
显然,user和user1是QuerySet,现在问题来了:
In [1]: user = User.objects.filter(pk__gt = 1)
In [2]: type(user)
Out[2]: django.db.models.query.QuerySet
In [3]: for i in user:pass
In [4]: user1=user[0:user.count()]
In [5]: type(user1)
Out[5]: list
用户也是QuerySet,但是user1成为列表.
这两个代码唯一的不同之处是for循环
for i in user:pass
我对于for循环发生了什么感到困惑?
解决方法:
通过运行for循环,您可以执行Django所谓的评估QuerySet的操作.在此之前,它被认为是懒惰的,这意味着添加过滤器和其他QuerySet方法实际上并没有访问数据库.
来自QuerySets are lazy的有趣片段(另请参见示例):
QuerySets are lazy – the act of creating a QuerySet doesn’t involve
any database activity. You can stack filters together all day long,
and Django won’t actually run the query until the QuerySet is
evaluated.
有一些评估您的QuerySet的语句和方法,记录在When QuerySets are evaluated中,包括迭代和切片已评估的QuerySet.
这意味着一旦您评估了一个查询集,例如通过使用for循环进行的迭代,Django实际上将查询数据库.完成此操作后,文档中的本段总结了在第二个shell代码片段的[4]中将user1 = user [0:user.count()]切片为QuerySet后得到的行为.
Slicing. As explained in Limiting QuerySets, a QuerySet can be sliced,
using Python’s array-slicing syntax. Slicing an unevaluated QuerySet
usually returns another unevaluated QuerySet, but Django will execute
the database query if you use the “step” parameter of slice syntax,
and will return a list. Slicing a QuerySet that has been evaluated
also returns a list.
内容总结
以上是互联网集市为您收集整理的python-Django查询集在for循环后成为列表全部内容,希望文章能够帮你解决python-Django查询集在for循环后成为列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。