将大的查询集分成小的块,并在不破坏RAM的情况下对它们进行迭代。
django-chunkator的Python项目详细描述
将大查询集分成小块,并在上面迭代而不杀死它们 你的公羊。
使用以下所有组合进行测试:
- Python:2.7、3.5、3.6、3.7
- django:1.11、2、2.1,大师级
用法
fromchunkatorimportchunkatorforiteminchunkator(LargeModel.objects.all(),200):do_something(item)
此工具旨在处理django queryset。
模型必须定义一个pk字段(默认情况下是这样的,但是 有时它可以被重写)并且这个pk必须是唯一的。django- chunkator已使用常规pks和 Uuid作为主键。
您还可以使用values():
fromchunkatorimportchunkatorforiteminchunkator(LargeModel.objects.values('pk','name'),200):do_something(item)
重要
如果使用values()youhave至少添加“pk”字段 否则,chunkator将抛出 MissingPkFieldException。
警告
这不会加速您的进程。不是一个大问题, 您将有几个小问题。这样可以节省内存,因为 在循环之前,您不会加载一个巨大的queryset结果。
如果要直接操作页面,可以使用chunkator页面
fromchunkatorimportchunkator_pagequeryset=LargeModel.objects.all().values('pk')forpageinchunkator_page(queryset,200):launch_some_task([item['pk']foriteminpage])
许可证
麻省理工学院执照。