分类 --django 下的文章

django重新整理migrations

在开发过程中,由于需求变更或者自我重构,需要清理migrations,以保持代码整洁和后续的可维护性。

场景一
不考虑数据库数据表,可以完全清空数据库里面的表的数据。
步骤:
删除所有migrations
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete
删除数据库的相关表
python manage.py makemigrations yourappname
python manage.py migrate yourappname

场景二
需要保留数据里面的数据,这种场景最为常见,只改结构不改数据
步骤:
使用migrate命令回滚0001_initial的migration history,回滚到最初
python manage.py migrate --fake yourappname zero

重新生成0001_initial,如果能保证已有0001_initial已是最新的,可跳过此步
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete

python manage.py makemigrations yourappname

在数据库中生成新的0001_initial记录
python migrate --fake-initial yourappname

另外,对于已经长期运行的项目,为了保留历史重大版本,不建议回到最初的版本,不利于版本控制。

如果中间有报错:
Django Table xxx already exist
python manage.py migrate --fake appname

参考:
https://segmentfault.com/a/1190000011594347