我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
当前回答
首先:找到你的应用程序之前的迁移,
Python manage.py showmigrations
eg:
bz
[X] 0001_initial
[ ] 0002_bazifff
如果您想要回滚0002_baziff迁移,
python manage.py migrate bz 0001_initial
如果要回滚0001_initial或all
python manage.py migrate bz zero
似乎只能回退0001
其他回答
您可以通过迁移到以前的迁移进行恢复。
例如使用下面的命令:
./manage.py migrate example_app one_left_to_the_last_migration
然后删除last_migration文件。
首先:找到你的应用程序之前的迁移,
Python manage.py showmigrations
eg:
bz
[X] 0001_initial
[ ] 0002_bazifff
如果您想要回滚0002_baziff迁移,
python manage.py migrate bz 0001_initial
如果要回滚0001_initial或all
python manage.py migrate bz zero
似乎只能回退0001
在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。
python manage.py showmigrations
python manage.py migrate {app name from show migrations} {00##_migration file.py}
如果你想恢复所有的迁移,使用0作为迁移的名称:
python manage.py migrate app_name_here zero
删除迁移文件。一旦您的模型中有了所需的迁移……
python manage.py makemigrations
python manage.py migrate
如果您在恢复迁移时遇到了麻烦,并且在某种程度上搞砸了它,那么您可以执行假迁移。
./manage.py migrate <name> --ignore-ghost-migrations --merge --fake
对于django版本小于1.7的版本,这将在south_migrationhistory表中创建条目,你需要删除该条目。
现在您可以轻松地恢复迁移。
PS:我被困了很长时间,执行假迁移,然后返回帮助我解决了问题。
您可以做的另一件事是删除手动创建的表。
与此同时,您还必须删除特定的迁移文件。同时,你必须删除django-migrations表中与特定迁移相关的特定条目(可能是你的情况下的最后一个)。