一、背景
最近在使用Django对Modles的表进行一些字段新增删减时出现了问题,网上查资料又太乱描述的不清楚。所以在这里重新整理了一些。
Django: 1.11.4
操作系统: Win10 64
二、解决办法
一般迁移
生成迁移文件
python manage.py makemigrations APP名称
执行迁移
-
python manage.py migrate
一般来说,新增字段后生成迁移文件再执行迁移就能在数据库中添加上对应的字段。但是笔者为了不想一条条的去添加default值,于是按照网上的解决办法进行操作的时候删除了django_migrations表里的数据导致执行迁移时一直提示1050的错误:xxxxx table already exsits......
终极解决方案
将Models新增的字段全部先进行注释,删除的字段进行恢复(与数据库目前存在的字段保持对应)
删除APP下面的migrations文件夹
-
重新生成迁移文件
python manage.py makemigrations APP名称
-
进入数据库将django_migrations中与APP相关的数据进行删除
python manage.py dbshell
delete from django_migrations where app = 'APP名称' -
将生成的迁移文件恢复到与数据库对应的状态,不需要再次执行迁移(因为这些字段已经在数据库中存在)
python manage.py migrate --fake APP名称
恢复注释或进行其他操作
-
生成迁移文件
python manage.py makemigrations APP名称
-
执行迁移
python manage.py migrate
总体的解决思路是:将生成的迁移文件恢复到与数据库对应的状态,再重新进行操作