在django查询集上使用iterator ()

我最近遇到了一些奇怪的行为,需要检查我的理解。

我最近遇到了一些奇怪的行为,需要检查我的理解。

我在模型中使用一个简单的过滤器,然后迭代结果。

例如

allbooks = Book.objects.filter(author='A.A. Milne')
for book in allbooks:
   do_something(book)

奇怪的是,它只返回了部分书籍清单。

但是,当使用相同的代码并使用 iterator()时,这似乎可以很好地工作。

for book in allbooks.iterator():
    do_something(book)

知道为什么吗?

p.s.我确实浏览了 Django 文档,但看不到如何将查询集缓存在其他任何地方...

iterator()评估 QuerySet(通过执行查询)并返回结果的迭代器。QuerySet 通常在内部缓存其结果,以便重复评估不会导致其他查询;iterator()将直接读取结果,而无需在 QuerySet 级别进行任何缓存。对于返回大量对象的 QuerySet,这通常会导致更好的性能和内存的显着减少

请注意,在已评估的 QuerySet 上使用iterator()将强制它再次评估,重复查询。

28

奇怪的是,它只返回了部分书籍清单。

这不是 queryset 必须工作的方式。迭代 queryset 应该给你数据库返回的每条记录。调试你的代码。你会发现错误,否则再次调试。

检查 REPL 很容易。运行manage.py shell

from app.models import Model
for o in Model.objects.filter(fieldname="foo"): print o
#Let's see DB query
from django.db import connection
print(connection.queries)
2

QuerySet 通常在内部缓存其结果,以便重复评估不会导致其他查询。相反,iterator()将直接读取结果,而无需在QuerySet级别进行任何缓存。

https://docs.djangoproject.com/en/dev/ref/models/querysets/

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(827)
模拟退火算法中探索与开发的区别(exploration vs exploitation)
上一篇
Django开发 IDE
下一篇

相关推荐

  • django web开发构建功能强大的Web应用

    Django 是一个开放源代码的 Web 应用框架,由 Python 编写而成。它采用了 MVC(模型-视图-控制器)的软件设计模式,即模型(Model)负责业务逻辑和数据处理,视图(View)负责显示逻辑,控制器(Controller)处理用户交互。…

    2023-04-23 13:21:35
    0 39 74
  • django网页设计:使用Django开发功能强大的网站

    Django网页设计是一种基于Python的Web开发框架,可以用来快速构建功能丰富的网站。它具有完整的MVC架构,可以帮助开发者更快速、更有效地构建功能强大的网站。…

    2023-06-04 13:43:39
    0 43 29
  • python django框架:如何使用Django框架构建高效的Web应用

    Python Django框架是一个基于Python的开源Web应用框架,它使用MTV(模型-视图-模板)模式,可以快速构建功能强大的Web应用程序。…

    2023-01-23 07:53:35
    0 91 46
  • 数据库修改语句update:Django:save()vsupdate()更新数据库

    关于数据库修改语句update的问题,在django save vs update中经常遇到,我正在写一个 Django 应用程序,我需要一个函数来更新数据库中的一个字段。…

    2022-12-01 07:21:32
    0 88 52
  • 将PyQtGui应用程序与 Django项目相结合

    我的问题如下:我有一个 PyQt Gui 应用程序。现在我想将我的一些数据发布到网络服务器。所以其他人可以在没有 PyQt Gui App 的情况下访问它。…

    2022-11-11 15:19:54
    0 55 43
  • Django开发 IDE

    我做了一些 Django 开发,但它都在文本编辑器中。我很好奇其他人在他们的 Django 开发中使用了什么更先进的开发工具。…

    2022-11-28 09:58:14
    0 72 71
  • 在django中将电子邮件发送到bcc和 cc

    views.py…

    2022-11-11 15:12:16
    0 51 36

发表评论

登录 后才能评论

评论列表(49条)