Django ORM 使用 Start Limit 限制 QuerySet

Django ORM Limit QuerySet By Using Start Limit

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

所有这些数据都是作为 JSON 的响应,正在对其进行解析以在模板中使用。

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

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

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

想知道这种方法是否可行或对这方面有帮助吗?

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

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

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

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