Django反向migration数据库
最近接手了一个django项目,由于之前的开发者经常手动修改表结构,导致django的migrations和数据库无法保持一致。想要彻底解决一下这个历史遗留问题。
思路
- 将现有数据库结构反向migration为model文件
- 删除现在所有app下的migrations文件
- 采集生成的model文件的migrations,migrate但是不应用
生成model文件
下面我使用的django项目名称为hello_world, 使用的setting文件为settings_dev
这里将数据库结构生成的model文件存储在test_models.py这个文件中
python manage.py inspectdb --settings=hello_world.settings_dev > test_models.py
然后从test_models.py
中把格子对应的app的model替换到models.py
中
删除旧的migrations文件
将各app下的migrations文件删除,包括__pycache__
文件夹
之后来到数据库执行
delete from django_migrations
将之前的migrations记录删除
生成新的migrations文件
来到django项目根目录,执行
python manage.py makemigrations --settings=hello_world.settings_dev
根据models生成新的migrations文件
然后migrate,但不应用修改
python manage.py migrate --fake-initial --settings=hello_wrold.settings_dev
到这个时候为止,django项目将会应用数据库的结构,并且会有新的migrations文件
接下来修改数据库就可以直接python manage.py makemigrations
和python manage.py migrate
这两条命令修改了