mcpField
D
django-queryset-batch-processing

django-queryset-batch-processing

github.com/lvtd-llc开发161 次安装7 周前更新
代码仓库

关于 django-queryset-batch-processing

面向需要处理大量数据库行的 Django 开发者的技能。它指导选择读写模式、批次大小和安全检查,减少不必要的模型加载与查询集缓存,同时兼顾业务行为。

主要功能

  1. 01选择标量读取或迭代器读取
  2. 02采用集合式批量写入
  3. 03控制批次与事务大小
  4. 04留意被跳过的钩子和信号
  5. 05衡量吞吐量、内存与正确性

适用场景

  1. 01处理大量行的导出或报表
  2. 02高效更新大量记录
  3. 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 结果缓存过载的同时,在行为允许的情况下将写操作改为基于集合的数据库操作。

工作流

  1. 确定逐行处理的工作。

    • 是只读导出或报告吗?
    • 是否需要模型方法、验证或信号?
    • 数据库能否直接计算或更新该值?
  2. 选择读取模式。

    • 对标量导出和报告使用 values() 或 values_list()。
    • 需要模型实例但不需要 QuerySet 缓存时,使用 iterator(chunk_size=...)。
    • 明确设置排序;不必要的排序会增加开销。
  3. 选择写入模式。

    • 对统一更新使用带有 F() 或表达式的 QuerySet.update()。
    • 每个对象的值不同时使用 bulk_update()。
    • 插入时使用 bulk_create(),仅在项目支持相应语义时使用冲突选项。
    • 仅当需要钩子、验证、副作用或信号时,才退回到逐实例调用 save()。
  4. 控制批次大小。

    • 控制事务范围。
    • 避免过大的 IN 列表和 CASE 更新。
    • 对生产任务监控锁、复制延迟和内存。

示例和注意事项请参阅 batch-patterns.md。

安全注意事项

  • 批量更新/删除操作不会调用各个模型实例的 save() 或 delete() 方法。
  • 批量操作可能跳过应用层副作用和信号。
  • 长时间运行的事务可能持有锁,并延迟清理或复制。

验证

在有代表性的批次上,测量每秒处理的行数、查询次数、内存、事务持续时间和正确性。

评论

支持 Markdown