我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。

我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?


当前回答

如果您在恢复迁移时遇到了麻烦,并且在某种程度上搞砸了它,那么您可以执行假迁移。

./manage.py migrate <name> --ignore-ghost-migrations --merge --fake

对于django版本小于1.7的版本,这将在south_migrationhistory表中创建条目,你需要删除该条目。

现在您可以轻松地恢复迁移。

PS:我被困了很长时间,执行假迁移,然后返回帮助我解决了问题。

其他回答

首先:找到你的应用程序之前的迁移,

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 migrate <APP_NAME> <MIGRATION_NUMBER_PREFIX>

MIGRATION_NUMBER_PREFIX是您要还原到的迁移的数字前缀,例如0001表示转到0001_initial.py迁移。然后您可以删除该迁移。

您可以使用0作为迁移号来恢复应用程序的所有迁移。

我在1.9.1中这样做了(删除最后或最新创建的迁移):

Rm <appname>/migrations/<migration #>* .使用实例 例如:rm myapp/migrations/0011* 登录到数据库并运行SQL语句(本例中为postgres) 删除django_migrations中名称为“0011%”的位置;

然后,我可以创建新的迁移,以刚才删除的迁移编号(在本例中为11)开始。

如果您在恢复迁移时遇到了麻烦,并且在某种程度上搞砸了它,那么您可以执行假迁移。

./manage.py migrate <name> --ignore-ghost-migrations --merge --fake

对于django版本小于1.7的版本,这将在south_migrationhistory表中创建条目,你需要删除该条目。

现在您可以轻松地恢复迁移。

PS:我被困了很长时间,执行假迁移,然后返回帮助我解决了问题。

在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。

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