我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
我做了一个迁移,添加了一个新表,想要恢复它并删除迁移,而不创建一个新的迁移。
我该怎么做?是否有恢复上次迁移的命令,然后我可以简单地删除迁移文件?
当前回答
在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。
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
其他回答
所有其他答案都非常适合回滚线性迁移。然而,当迁移是非线性的,即有多个叶节点,我们希望只回滚一条路径,那么我们可以这样做:
X
/ \
A B [A and B can represent any number of linear migrations.]
\ /
Y (merge migration)
如果我们需要回滚A,B和y,那么我们可以用其他答案状态的方式来做。 即python manage.py迁移应用X。
如果只需要取消回滚B和回滚Y,请执行以下步骤:
通过执行python manage.py迁移应用程序B(或A;这两个作品)。 暂时从项目位置移除迁移文件A和Y。 现在取消应用B,执行python manage.py迁移应用X。
将迁移文件A和Y带到原始位置。现在,如果您愿意,您可以安全地删除未应用的迁移B和Y。
要点是django只能回滚迁移,如果文件在位置中。如果您不想回滚一个迁移路径(例如这里的a),请在执行回滚时将其从项目位置中移除。
更多关于这个。https://stackoverflow.com/a/71231925/8663277
您可以做的另一件事是删除手动创建的表。
与此同时,您还必须删除特定的迁移文件。同时,你必须删除django-migrations表中与特定迁移相关的特定条目(可能是你的情况下的最后一个)。
在恢复之前不要删除迁移文件。我犯了这个错误,没有迁移文件,数据库就不知道要删除什么东西。
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 example_app one_left_to_the_last_migration
然后删除last_migration文件。
我在1.9.1中这样做了(删除最后或最新创建的迁移):
Rm <appname>/migrations/<migration #>* .使用实例 例如:rm myapp/migrations/0011* 登录到数据库并运行SQL语句(本例中为postgres) 删除django_migrations中名称为“0011%”的位置;
然后,我可以创建新的迁移,以刚才删除的迁移编号(在本例中为11)开始。