超超哥AI云计算超哥讲AI 出品

社群入口

AI 超哥 Codex 副业群

扫码加入群聊,一起交流 AI、Codex 与副业实践。

原图注明二维码于10月20日前有效;若提示过期或无法入群,请等待更新二维码。

AI 超哥 Codex 副业群入群二维码在新窗口打开原图

模型、关系与数据库迁移

Django Web 开发#Python全栈#第十一阶段#Django Web 开发#模型、关系与数据库迁移约 792 字 · 2 分钟阅读
追问显示
点击任意追问卡片可收起 / 展开

Django 模型类、模型实例和数据库表是什么关系?

追问 新建 Python 实例是否立即写入数据库?主键、字段属性与持久化状态怎样区分?

常见模型字段应该如何根据业务选择?

追问 标题、正文、金额、状态和时间分别适合什么类型?为什么金额通常不宜直接采用浮点字段?

字段的 null 与 blank 有什么区别?

追问 数据库允许空值与校验允许空输入分别由谁决定?字符串字段为什么常常不宜同时保存空字符串和 NULL?

模型字段默认值如何定义?

追问 调用函数的结果与传入可调用对象有什么区别?时间和可变默认值怎样避免所有实例共用错误初始数据?

ForeignKey、OneToOneField 与 ManyToManyField 如何表达关系?

追问 用户资料、题目分类与题目标签怎样建模?多对多关系带额外字段时为何需要考虑中间模型?

外键 on_delete 的常见策略有什么业务影响?

追问 CASCADE、PROTECT 和 SET_NULL 怎样选择?为什么不能把 Django 的删除处理简单等同于所有数据库原生级联行为?

字段唯一性、UniqueConstraint、CheckConstraint 与索引分别解决什么问题?

追问 每位用户对每道题只能有一条练习记录,怎样表达?为什么索引不等于业务校验,应用检查也不能代替并发下的数据库约束?

makemigrations 与 migrate 有什么区别?

追问 迁移文件、迁移历史状态与实际数据库结构怎样对应?为什么创建迁移后表结构还可能没有变化?

修改模型却没有生成预期迁移,或数据库表与模型不一致,怎样排查?

追问 应用注册、迁移文件、已应用记录与实际连接数据库如何核对?为什么随意删除迁移或使用 fake 可能掩盖问题?

结构迁移与数据迁移分别适合什么任务?

追问 RunPython 为什么应考虑历史模型和可逆性?给已有大量记录增加必填字段时,如何安排默认值、回填与约束?

核对资料: Django 迁移。