首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django中加速大型数据集的迭代

如何在Django中加速大型数据集的迭代
EN

Stack Overflow用户
提问于 2011-04-14 06:03:55
回答 4查看 4K关注 0票数 7

我有一个来自Django ORM查询的大约1500条记录的查询集。我使用了select_related()和only()方法来确保查询是紧凑的。我还使用了connection.queries来确保只有一个查询。也就是说,我已经确保不会在每次迭代中调用额外的查询。

当我从connection.queries运行剪切和粘贴查询时,它在0.02秒内运行。但是,迭代这些记录需要7秒钟,并且不对它们做任何操作(pass)。

我能做些什么来加快速度呢?是什么导致了这种缓慢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-14 06:09:16

当QuerySet中充满了模型对象时,它会变得非常笨重。在类似的情况下,我在查询集上使用了.values方法,将我需要的属性指定为字典列表,这样迭代起来会快得多。http://docs.djangoproject.com/en/1.3/ref/models/querysets/#values-list

票数 16
EN

Stack Overflow用户

发布于 2011-04-14 07:03:51

1500条记录远远不是一个大的数据集,7秒真的太多了。您的模型中可能存在一些问题,您可以通过获取(正如Brandon所说的) values()查询来轻松地检查它,然后通过迭代字典显式地创建1500对象。只需在构造之前将ValuesQuerySet转换为一个列表,即可排除db连接。

票数 2
EN

Stack Overflow用户

发布于 2011-04-14 07:54:16

你是如何迭代每一项的:

代码语言:javascript
复制
items = SomeModel.objects.all()

each上的常规for循环

代码语言:javascript
复制
for item in items:
    print item

或使用QuerySet iterator

代码语言:javascript
复制
for item in items.iterator():
    print item

根据文档,iterator()可以提高性能。这同样适用于循环非常大的Python列表或字典,最好使用iteritems()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5656238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档