1. 概述:
删除所有app下migrations文件夹中除__init__.py以外的其它文件(0001_initial.py)后, makemigrations migrate 迁移不报错
导入现有数据库备份文件后,
makemigrations 显示无更改,migrate 迁移报错 django.db.utils.OperationalError: (1060, "Duplicate column name 'user_id'")
2. 相关报错:
django.db.utils.OperationalError: (1060, "Duplicate column name 'user_id'")
3. 报错原因:
删除所有app下migrations文件夹中除__init__.py以外的其它文件(0001_initial.py)后, makemigrations migrate 迁移时,
报错的表由于存在外键,而外键关联的表尚未建立,所以Django会生成两个类似0001_initial.py的文件,前一个不包含外键,后一个添加外键。
猜测可能是导入现有数据库备份文件后,migrate时又重新执行添加外键的0001_initial.py文件,此时由于外键已经存在,所以报错。
4. 解决办法
方法1:
1、查看新建字段是否与已有重复
2、可使用 python manage.py migrate myapp --fake
方法2:
删除所有app下migrations文件夹中除__init__.py以外的其它文件(0001_initial.py)后,按关联顺序,执行
makemigrations [app_label [app_label ...]]
migrate [app_label] [migration_name]
方法3:
删除出错的app下migrations文件夹中除__init__.py以外的其它文件(0001_initial.py)后,
重新执行 makemigrations migrate 迁移。