Skip to content

第四站:ORM、关系与事务 ​

课程首页 | 路线映射

本站让查询的成本和写入的一致性变得可见。目标不是少写 SQL,而是知道 ORM 最终让数据库做了什么。

可运行检查 ​

bash
python manage.py shell
python manage.py test tickets

在 shell 中打印 Ticket.objects.filter(status="open").query,再学习QuerySet、关系与并发事务和执行计划、批量与查询预算。

交付物 ​

  • 列表一次取回负责人,查询数不会随行数线性增长。
  • “认领工单”在目标数据库上使用事务与行锁。
  • 提交后副作用通过 transaction.on_commit() 触发。
  • 并发失败有明确返回或有限重试,不静默覆盖。

深水边界 ​

QuerySet 惰性会把查询推迟到迭代、序列化或模板。atomic() 保证数据库事务,不会自动撤销邮件和外部 HTTP。SQLite 的 select_for_update() 不能代表 PostgreSQL/MySQL 的锁行为。

练习(无答案展开) ​

  1. 查询每位用户的未关闭工单数,并说明结果粒度。
  2. 修复列表页的负责人 N+1。
  3. 实现并测试两个请求竞争同一工单时只有一个成功。

练习答案 | 下一站

用心记录每一步成长