SQLAlchemy Code Review 是一个面向 SQLAlchemy 代码审查的技能,主要用于在审查 SQLAlchemy 2.0 代码时检查会话管理、关系配置、N+1 查询以及迁移模式。
用途 该技能适用于审查 SQLAlchemy 2.0 代码,检查会话(session)管理、关系(relationship)配置、N+1 查询以及迁移(migration)模式。
主要能力 技能提供快速参考表,将问题类型映射到参考文档:
- 会话生命周期、上下文管理器、异步会话 → references/sessions.md
- relationship()、懒加载、N+1、joinedload → references/relationships.md
- select() 与 query()、ORM 开销、批量操作 → references/queries.md
- Alembic 模式、可逆迁移、数据迁移 → references/migrations.md
审查清单
- 会话使用上下文管理器(with、async with)
- 不在请求或线程之间共享会话
- 会话正确关闭/清理
- relationship() 使用合适的懒加载策略
- 显式使用 joinedload/selectinload 以避免 N+1
- 循环中不进行懒加载(N+1 查询)
- 使用 SQLAlchemy 2.0 select() 语法,而非旧版 query()
- 批量操作使用 bulk_insert/bulk_update,而非 ORM 循环
- 异步会话使用正确的异步上下文管理器
- 迁移可通过 downgrade() 回滚
- 数据迁移使用 op.execute() 而非 ORM 模型
- 迁移依赖顺序正确
验证门(SQLAlchemy 专用) 每个与 SQLAlchemy 相关的发现运行一次,在能够锚定 file:line 之后、发现提交之前。如果某一步的通过条件未满足,则不要按原样断言该发现——收集证据、撤回、降低严重程度或改写为问题。
Gate 1 — 会话作用域与生命周期
- 1a:打开创建或注入会话的模块(不凭记忆)。通过条件:Session、sessionmaker、async_session 或产生会话的工厂/Depends() 的 file:line。
- 1b:如果声称泄漏、跨请求共享或缺少清理:追踪会话的作用域(上下文管理器、try/finally、中间件)。通过条件:引用作用域区域的 file:line 范围,或读取后若作用域正确则撤回。
Gate 2 — N+1、懒加载、预加载
- 2a:识别循环或重复调用点(ORM 属性访问、循环中 execute)。通过条件:循环或热路径的 file:line。
- 2b:如果声称 N+1:指出每次迭代发出的关系或查询模式。通过条件:关系或每次迭代的 SQL 模式及 file:line,或如果不清楚则改写为问题。
Gate 3 — 迁移(Alembic)
- 3a:打开修订文件(例如 versions/ 下,或项目的 Alembic 布局)。通过条件:revision / upgrade / downgrade 的仓库相对路径 + file:line。
- 3b:如果声称 downgrade() 损坏或数据迁移有风险:指出涉及的 op.* / op.execute()。通过条件:该文件中每个声称操作的片段或行范围,或撤回。
何时加载参考
- 审查会话创建/清理 → sessions.md
- 审查模型关系 → relationships.md
- 审查数据库查询 → queries.md
- 审查 Alembic 迁移文件 → migrations.md
审查问题
- 所有会话是否都通过上下文管理器正确管理?
- 关系是否配置为避免 N+1 查询?
- 查询是否使用 SQLAlchemy 2.0 select() 语法?
- 所有迁移是否可逆并经过正确测试?
适用场景 适用于对 SQLAlchemy 2.0 项目进行代码审查,尤其是涉及会话管理、关系与查询性能、以及 Alembic 迁移的场景。
限制 该技能聚焦于 SQLAlchemy 相关的审查点,不涵盖其他框架或非 SQLAlchemy 的数据库访问模式。具体参考文档内容、安装方式、收费与价格信息暂未提供。