微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何加快Django中大型数据集的迭代速度

如何解决我如何加快Django中大型数据集的迭代速度

|| 我有一个来自Django ORM查询的大约1500条记录的查询集。我使用过select_related()和only()方法来确保查询紧密。我还使用connection.queries确保只有一个查询。也就是说,我确保每次迭代都不会调用额外的查询。 当我运行查询从connection.queries中剪切并粘贴时,它在0.02秒内运行。但是,遍历这些记录并对其不执行任何操作(通过)需要7秒钟。 我该怎么做才能加快速度?是什么导致这种缓慢?     

解决方法

当QuerySet充满模型对象时,它可能会变得很沉重。在类似情况下,我在queryset上使用.values方法将我需要的属性指定为字典列表,可以更快地进行迭代。 http://docs.djangoproject.com/zh-CN/1.3/ref/models/querysets/#values-list     ,1500条记录远不是一个大数据集,而七秒钟实在太多了。您的模型中可能存在一些问题,您可以通过获取(就像布兰登所说的)values()查询轻松地检查它,然后通过迭代字典显式创建1500对象。只需在构造之前将ValuesQuerySet转换为列表即可排除数据库连接。     ,您如何遍历每个项目:
items = SomeModel.objects.all()
每个上的常规循环
for item in items:
    print item
或使用QuerySet迭代器
for item in items.iterator():
    print item
根据文档,ѭ3可以提高性能。循环很大的Python列表或字典时也是如此,最好使用
iteritems()
。     ,您模型的ѭ5声明是否会将其存储在其他相关表中的字段“排序依据”中?如果是这样,当Django运行并为每个项目获取该字段,然后对其进行排序时,您尝试进行的迭代可能会触发1,500个查询。向我们展示您的代码将有助于我们解决问题!     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。