QuerySet、查询效率与事务基础
Django Web 开发#Python全栈#第十一阶段#Django Web 开发#QuerySet、查询效率与事务基础约 830 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
Manager 与 QuerySet 分别提供什么能力?
追问 objects、all 和 filter 怎样协作?如何封装“当前用户可见题目”查询而避免每个视图重复规则?
QuerySet 的惰性执行如何理解?
追问 创建、链式筛选、遍历、转换为 list 和取布尔值时,哪些操作可能执行查询?结果缓存又会怎样影响重复使用?
get、filter 与 first 有什么区别?
追问 零条、一条与多条记录分别怎样表现?为什么 first 不能随意替代应当保证唯一性的 get?
字段查找、跨关系查找与 Q 对象怎样组合查询?
追问 关键词匹配标题或正文,同时限定发布状态,应如何表达与、或和否定,避免括号优先级错误?
order_by、切片与 Paginator 怎样支持列表分页?
追问 稳定排序为什么重要?非法页码、空列表和数据量大时应如何处理,count 与深分页各可能有什么成本?
调用模型 save 是否自动执行 full_clean?
追问 模型校验、ModelForm 校验与数据库约束怎样分工?通过脚本直接保存模型时,如何确保业务规则没有被绕过?
实例 save、QuerySet.update 与批量创建有什么行为差别?
追问 哪些操作不会逐个调用模型 save 或发送相应保存信号?自定义保存逻辑与自动更新时间为何需要特别核对?
select_related 与 prefetch_related 怎样缓解 N+1 查询?
追问 外键关联与多对多集合各如何选择?如何通过实际查询次数和数据规模验证,而不是无条件预取全部关系?
transaction.atomic 如何界定一组数据库修改?
追问 异常回滚、嵌套块和捕获异常的位置为什么重要?发送通知、删除文件等外部操作为何不随数据库自动回滚?on_commit 适合什么场景?
F 表达式、get_or_create 与数据库唯一约束如何应对常见并发问题?
追问 计数更新与“先查询再创建”各有什么竞态?为何 get_or_create 的可靠性仍依赖正确的唯一性条件?
核对资料: Django 查询、Django 数据库事务。