首页 > 解决方案 > Django ORM 使用开始限制限制查询集

问题描述

我最近正在构建一个 Django 项目,它处理 20 k 行的结果集。

所有这些数据都是 JSON 格式的响应,并且正在解析它以在模板中使用。

目前,我正在使用来自 django ORM 的 objects.all()。

我想知道,我们是否可以部分获得完整的结果集。比如说,如果结果是 10k 行,则每个拆分为 2K 行。

我的方法是延迟加载数据,使用一次增加 2k 的限制变量。

想知道这种方法是否可行或在这方面有什么帮助?

标签: pythonjsondjangolazy-loading

解决方案


是的,您可以使用.iterator(…)[Django-doc]。正如文档所说:

for obj in MyModel.objects.all().iterator(chunk_size=2000):
    # … do something with obj
    pass

在这种情况下,这将获取 2'000 的记录。如果您将限制设置得更高,它将在每个查询中获取更多记录,但是您需要更多内存来在特定时刻存储所有这些记录。设置chunk_size较低将导致更少的内存使用,但更多的数据库查询。

但是,您可能对分页[Django-doc]感兴趣。在这种情况下,请求包含页码,并且您只返回有限数量的记录。这通常更好,因为并非所有客户端本身都需要所有数据,而且客户端通常需要能够自己处理数据,如果块太大,客户端也会被淹没。


推荐阅读