全书目录

第十四篇:Django 完全指南 —— 中央行政城区宇宙

第八章:Migration —— 城区规划变更必须有书面批文

1 分钟 353 字 第 282 / 962 个阅读单元

很多初学者把 migration 当成“框架自动生成的小碎片”。

这理解太浅了。

Migration 是行政城区的规划变更批文

当你改了 models.py,并不会自动改数据库。中间必须有正式流程:

bash
python manage.py makemigrations
python manage.py migrate

流程图非常重要:

text
你修改 models.py
    │
    ▼
makemigrations
    │
    ▼
生成 permits/migrations/0002_xxx.py
    │
    ▼
migrate
    │
    ▼
数据库结构真正变更

你可以把 migration 文件看成:

  • 哪天把哪条街扩建了
  • 哪天加了一个新窗口
  • 哪天档案表新增了一列
  • 哪天外键关系变了

所以它有几个铁律:

  • migration 文件要提交到版本库
  • 不要把它当缓存删着玩
  • 已经上线并执行过的 migration,不要随便改历史
  • 数据库结构变更要通过 migration,而不是手工偷偷改生产库

常用命令也要熟:

bash
python manage.py showmigrations
python manage.py sqlmigrate permits 0001

这两个命令很像规划局的档案查询器:

  • showmigrations 看哪些批文已生效
  • sqlmigrate 看某个批文最终会执行什么 SQL