mcpField
D
django-db-side-computation

django-db-side-computation

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

关于 django-db-side-computation

django-db-side-computation 是面向 Django 开发者的技能,用于将适合的 Python 计算移至数据库执行。它涵盖 ORM 表达式选择、查询计划验证及是否存储结果的判断,并提醒测量性能和核对正确性。

主要功能

  1. 01识别可下推的 Python 计算
  2. 02选择 Django ORM 表达式
  3. 03检查 SQL 与查询计划
  4. 04评估索引和结果存储方式
  5. 05对比计算正确性与耗时

适用场景

  1. 01将相关对象计数改为数据库聚合
  2. 02查询每条记录关联对象的最新值
  3. 03评估窗口函数排名查询

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lvtd-llc/skills --skill django-db-side-computation

安装后在 Claude Code 中输入/django-db-side-computation确认已加载。

附带文件references/aggregation-patterns.md

详细介绍

Django 数据库端计算

当 Django 将行提取到 Python 中进行计算,而数据库可以更高效或更一致地完成这些计算时,使用此技能。

工作流

  1. 确定 Python 中的计算内容。

    • 计数、求和、最小值/最大值、布尔值、最新的关联行、排名、反规范化总计,或逐行派生字段。
    • 确认计算结果是否必须精确、实时且在事务中保持一致。
  2. 选择 SQL 表达式级别。

    • 对于简单比较和更新,使用 filter()、exclude() 和 F()。
    • 对于逐对象计数和总计,使用 annotate() 和聚合函数。
    • 对于条件计数和求和,使用筛选聚合。
    • 对于是/否形式的关联行检查,使用 Exists()。
    • 对于最新的关联值或标量关联值,使用带有 OuterRef() 的 Subquery()。
    • 对于排名和累积计算,使用 Window()。
    • 如果数据库支持,则对确定性的同行计算列使用 GeneratedField。
  3. 验证查询结构。

    • 检查生成的 SQL 或 QuerySet.explain()。
    • 必要时,在分组前清除非预期的排序。
    • 确认索引能够支持联接、筛选和排序。
  4. 决定是否应存储结果。

    • 对于请求时计算的值,使用注解。
    • 对于确定性的同行计算值,使用生成列。
    • 如果跨行聚合查询开销过高且允许数据过时,则使用物化视图或反规范化表。

有关 Django 表达式示例,请参阅 aggregation-patterns.md。

安全提示

  • 数据库计算不一定更快;复杂查询可能会使数据库过载,或阻塞 OLTP 工作。
  • 生成列有数据库特定的限制;PostgreSQL 仅支持持久化生成列。
  • 如果组合不当,子查询和注解可能会重复执行。请查看执行计划。

验证

先用有代表性的数据,将结果与旧的 Python 计算进行正确性比较,然后测量 SQL 执行时间和总响应时间。

评论

支持 Markdown