何时在Django ORM中使用或不使用iterator() - python

这是从django docs on the queryset iterator() method:

QuerySet通常在内部缓存其结果,以便重复评估
不会导致其他查询。相反,iterator()将读取结果
直接进行,而无需在QuerySet级别进行任何缓存(在内部,默认迭代器调用iterator()并缓存返回值)。对于一个QuerySet
返回只需要访问一次的大量对象,
这样可以提高性能并显着减少内存。

阅读后,我仍然感到困惑:关于提高性能和减少内存的说法表明,我们应该只使用iterator()方法。有人可以举例说明iterator()用法的好坏吗?

即使没有缓存查询结果,如果他们真的想多次访问模型,也不能有人执行以下操作吗?

saved_queries = list(Model.objects.all().iterator())

参考方案

注意您呼出的句子的第一部分:For a QuerySet which returns a large number of objects that you only need to access once
因此,与此相反的是:如果您需要重用一组结果,并且结果数量不多,不会导致内存问题,那么您不应该使用iterator。因为额外的数据库往返行程是,所以与使用缓存结果相比,总是会降低性能。

您可以强制将QuerySet评估为一个列表,但是:

  • 除了saved_queries = Model.objects.all()
  • 外,还需要更多的输入

  • 说您要在网页上对结果进行分页:您将把所有结果强行放入内存中(回到可能的内存问题),而不是让随后的分页器选择它需要的20个结果的一部分
  • QuerySet s are lazy,例如,您可以有一个上下文处理器,该处理器将QuerySet放入每个请求的上下文中,但仅在对某些请求进行访问时才被评估,但是如果您已强制评估每个请求都会发生数据库命中
  • 典型的Web应用程序案例是针对相对较小的结果集(必须及时将其交付给浏览器,因此如果需要,可以使用分页或类似技术来减少数据量),因此通常,标准QuerySet行为就是您所需要的想。毫无疑问,您必须store the QuerySet in a variable才能获得缓存的好处。

    良好地使用迭代器:处理结果占用大量可用内存(很多小对象或更少的大对象)。以我的经验,当执行大量数据处理时,这通常是在管理命令中。

    Django BigInteger自动递增字段作为主键? - python

    我目前正在建立一个涉及大量集体智慧的项目。每个访问该网站的用户都将创建一个唯一的配置文件,然后将他们的数据用于为自己和其他用户计算最佳匹配。默认情况下,Django创建一个INT(11)id字段来处理模型的主键。我担心这会很快溢出(即,大约2.4b个设备在未事先设置Cookie的情况下访问了该页面)。如何在MySQL中将其更改为BIGINT并在Django自…

    Django Python日期时间设置为午夜 - python

    我有django对象的日期时间,但可以是一天中的任何时间。它可以是一天中的任何时间,但我需要将时间设置为00:00:00(另一个日期设置为23:59:59,但原理是相同的)end_date = lastItem.pub_date 当前的结束日期是2002-01-11 12:34:56我需要怎么做才能将其更改为00:00:00?我试过了:end_date.ho…

    Python GPU资源利用 - python

    我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

    Django:使用contenttypes框架的一般关系示例? - python

    我已经多次浏览了有关contenttypes框架的Django文档,但我对它的理解不足以在项目中实现泛型关系。我一直在寻找有关此事的在线示例或教程,但找不到一个。称我为哑巴,但在这方面我需要一些帮助(请不要仅通过链接到文档来回答问题)。基于在线资源的缺乏,我相信如果您用一个完整的例子来回答这个问题,您的答案可能是迄今为止有关django通用关系(奖金!)的最…

    Python:图像处理可产生皱纹纸效果 - python

    也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…