我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
当前回答
下面是我的解决方案,因为上面的解决方案并没有真正涵盖使用RunPython时的用例。
可以通过ORM with访问该表
from django.db.migrations.recorder import MigrationRecorder
>>> MigrationRecorder.Migration.objects.all()
>>> MigrationRecorder.Migration.objects.latest('id')
Out[5]: <Migration: Migration 0050_auto_20170603_1814 for model>
>>> MigrationRecorder.Migration.objects.latest('id').delete()
Out[4]: (1, {u'migrations.Migration': 1})
因此,您可以查询这些表并删除与您相关的条目。这样您就可以详细地进行修改。使用RynPython迁移,您还需要处理添加/更改/删除的数据。上面的例子只显示了如何通过Djang ORM访问表。
其他回答
您可以通过迁移到以前的迁移进行恢复。
例如使用下面的命令:
./manage.py migrate example_app one_left_to_the_last_migration
然后删除last_migration文件。
下面是我的解决方案,因为上面的解决方案并没有真正涵盖使用RunPython时的用例。
可以通过ORM with访问该表
from django.db.migrations.recorder import MigrationRecorder
>>> MigrationRecorder.Migration.objects.all()
>>> MigrationRecorder.Migration.objects.latest('id')
Out[5]: <Migration: Migration 0050_auto_20170603_1814 for model>
>>> MigrationRecorder.Migration.objects.latest('id').delete()
Out[4]: (1, {u'migrations.Migration': 1})
因此,您可以查询这些表并删除与您相关的条目。这样您就可以详细地进行修改。使用RynPython迁移,您还需要处理添加/更改/删除的数据。上面的例子只显示了如何通过Djang ORM访问表。
有一个很好的库可以使用它叫djagno-nomad,虽然没有直接关系到所问的问题,想分享这个,
场景:大多数情况下,当切换到项目时,我们觉得它应该恢复我们在当前分支上所做的更改,这正是这个库所做的,下面签出
https://pypi.org/project/django-nomad/
我在1.9.1中这样做了(删除最后或最新创建的迁移):
Rm <appname>/migrations/<migration #>* .使用实例 例如:rm myapp/migrations/0011* 登录到数据库并运行SQL语句(本例中为postgres) 删除django_migrations中名称为“0011%”的位置;
然后,我可以创建新的迁移,以刚才删除的迁移编号(在本例中为11)开始。
在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。
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