很多初学者把 migration 当成“框架自动生成的小碎片”。
这理解太浅了。
Migration 是行政城区的规划变更批文。
当你改了 models.py,并不会自动改数据库。中间必须有正式流程:
python manage.py makemigrations
python manage.py migrate流程图非常重要:
你修改 models.py
│
▼
makemigrations
│
▼
生成 permits/migrations/0002_xxx.py
│
▼
migrate
│
▼
数据库结构真正变更你可以把 migration 文件看成:
- 哪天把哪条街扩建了
- 哪天加了一个新窗口
- 哪天档案表新增了一列
- 哪天外键关系变了
所以它有几个铁律:
- migration 文件要提交到版本库
- 不要把它当缓存删着玩
- 已经上线并执行过的 migration,不要随便改历史
- 数据库结构变更要通过 migration,而不是手工偷偷改生产库
常用命令也要熟:
python manage.py showmigrations
python manage.py sqlmigrate permits 0001这两个命令很像规划局的档案查询器:
showmigrations看哪些批文已生效sqlmigrate看某个批文最终会执行什么 SQL