关于 django-queryset-batch-processing
面向需要处理大量数据库行的 Django 开发者的技能。它指导选择读写模式、批次大小和安全检查,减少不必要的模型加载与查询集缓存,同时兼顾业务行为。
主要功能
- 01选择标量读取或迭代器读取
- 02采用集合式批量写入
- 03控制批次与事务大小
- 04留意被跳过的钩子和信号
- 05衡量吞吐量、内存与正确性
适用场景
- 01处理大量行的导出或报表
- 02高效更新大量记录
- 03以有限批次运行生产任务
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-queryset-batch-processing安装后在 Claude Code 中输入/django-queryset-batch-processing确认已加载。
附带文件references/batch-patterns.md
详细介绍
Django QuerySet 批处理
当 Django 代码处理大量行时,请使用此技能。目标是在避免加载不必要的模型实例和导致 QuerySet 结果缓存过载的同时,在行为允许的情况下将写操作改为基于集合的数据库操作。
工作流
-
确定逐行处理的工作。
- 是只读导出或报告吗?
- 是否需要模型方法、验证或信号?
- 数据库能否直接计算或更新该值?
-
选择读取模式。
- 对标量导出和报告使用
values()或values_list()。 - 需要模型实例但不需要 QuerySet 缓存时,使用
iterator(chunk_size=...)。 - 明确设置排序;不必要的排序会增加开销。
- 对标量导出和报告使用
-
选择写入模式。
- 对统一更新使用带有
F()或表达式的QuerySet.update()。 - 每个对象的值不同时使用
bulk_update()。 - 插入时使用
bulk_create(),仅在项目支持相应语义时使用冲突选项。 - 仅当需要钩子、验证、副作用或信号时,才退回到逐实例调用
save()。
- 对统一更新使用带有
-
控制批次大小。
- 控制事务范围。
- 避免过大的
IN列表和CASE更新。 - 对生产任务监控锁、复制延迟和内存。
示例和注意事项请参阅 batch-patterns.md。
安全注意事项
- 批量更新/删除操作不会调用各个模型实例的
save()或delete()方法。 - 批量操作可能跳过应用层副作用和信号。
- 长时间运行的事务可能持有锁,并延迟清理或复制。
验证
在有代表性的批次上,测量每秒处理的行数、查询次数、内存、事务持续时间和正确性。
评论
支持 Markdown