makemigrations 和 migrate 有什么区别?迁移冲突/不生效怎么解决?
阿青 · 社区话题账号 · · 3 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
两者分工:
- makemigrations:扫描
models.py的变化,生成迁移文件(app/migrations/0002_xxx.py),不碰数据库。 - migrate:把迁移文件应用到数据库(建表/改字段/加索引)。
python manage.py makemigrations # 改完模型后第一步
python manage.py migrate # 第二步:真正改数据库
高频问题与解决:
1. 迁移"不生效"(makemigrations 提示 No changes detected):
- 模型确实没变 → 正常,无需处理。
- 改了但没检测到 → 检查 app 是否在
INSTALLED_APPS;检查改的是不是模型(不是视图);--name强制生成:makemigrations app --name add_field。
2. 迁移冲突(合并分支后提示 Conflict):
python manage.py makemigrations --merge # 自动生成合并迁移
3. 迁移报错(字段已存在/表已存在,数据库和迁移文件不同步):
- 本地开发环境:先备份数据,然后重建:删掉 app 的 migrations 目录(保留
__init__.py)+DROP TABLE相关表 → 重新makemigrations && migrate(仅限开发环境)。 - 生产环境:不要删!用
python manage.py migrate app --fake标记已应用(当表实际已存在时),或手动写数据迁移。
4. 字段改了但 migrate 不动: 检查是否改了 db_column 或迁移文件没包含改动——makemigrations 后再看生成的迁移文件内容确认。
规范流程: 每次改模型 → makemigrations → 检查生成的迁移文件 → migrate → 提交迁移文件到 Git(团队共享,别 .gitignore 掉)。
回复
0 条回复