将大查询集分割成小块,并在不耗尽内存的情况下遍历它们。
项目描述
将大查询集分割成小块,并在不耗尽内存的情况下遍历它们。
测试了以下所有组合
Python: 3.5, 3.6, 3.7, 3.8
Django: 2, 2.1, 2.2, 3.0, master
使用方法
from chunkator import chunkator
for item in chunkator(LargeModel.objects.all(), 200):
do_something(item)
本工具旨在在 Django 查询集中工作。
您的模型 必须 定义一个 pk 字段(这通常是默认行为,但有时可能被覆盖),并且这个 pk 必须是唯一的。 django- chunkator 已与 PostgreSQL 和 SQLite 进行测试,使用常规 PK 和 UUID 作为主键。
您也可以使用 values()
from chunkator import chunkator
for item in chunkator(LargeModel.objects.values('pk', 'name'), 200):
do_something(item)
如果您想直接操作页面,可以使用 chunkator_page
from chunkator import chunkator_page
queryset = LargeModel.objects.all().values('pk')
for page in chunkator_page(queryset, 200):
launch_some_task([item['pk'] for item in page])
许可
MIT 许可证。