python - Django ORM 使用开始限制限制查询集
问题描述
我最近正在构建一个 Django 项目,它处理 20 k 行的结果集。
所有这些数据都是 JSON 格式的响应,并且正在解析它以在模板中使用。
目前,我正在使用来自 django ORM 的 objects.all()。
我想知道,我们是否可以部分获得完整的结果集。比如说,如果结果是 10k 行,则每个拆分为 2K 行。
我的方法是延迟加载数据,使用一次增加 2k 的限制变量。
想知道这种方法是否可行或在这方面有什么帮助?
解决方案
是的,您可以使用.iterator(…)
[Django-doc]。正如文档所说:
for obj in MyModel.objects.all().iterator(chunk_size=2000):
# … do something with obj
pass
在这种情况下,这将获取 2'000 的记录。如果您将限制设置得更高,它将在每个查询中获取更多记录,但是您需要更多内存来在特定时刻存储所有这些记录。设置chunk_size
较低将导致更少的内存使用,但更多的数据库查询。
但是,您可能对分页[Django-doc]感兴趣。在这种情况下,请求包含页码,并且您只返回有限数量的记录。这通常更好,因为并非所有客户端本身都需要所有数据,而且客户端通常需要能够自己处理数据,如果块太大,客户端也会被淹没。
推荐阅读
- c# - 具有多个条件的 switch 语句 [已解决]
- vb.net - vb.net 中的 System.Argument 异常错误,我的代码如下
- python - 运行Python Flask Server时,Jenkins不成功,继续加载
- javascript - 全选复选框如何正常工作?
- java - 使用多线程的 Java 售票
- excel-formula - 如何在Excel中过滤多个条件下的行和列
- hybris - 尝试在调试模式下启动 hybrisserver 时在上下文初始化期间遇到异常
- ruby - 使用 Gosu.button_down 显示点击屏幕的次数
- java - Gradle 同步不会停止 logcat 一次又一次地显示一些以下错误
- c++ - CMake:此项目中使用了以下变量,但它们设置为 NOTFOUND