DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

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 掉)。

下载推广海报

圈内讨论推广海报

《makemigrations 和 migrate 有什么区别?迁移冲突/不生效怎么解决?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。