撤销最近的Alembic迁移

103

我使用 alembic revision --autogenerate 创建了一个迁移,使用 alembic upgrade head 将其应用于我的开发数据库,然后意识到这并不是我想要的。

我该如何还原此迁移以便我可以进行微调并再次尝试?

3个回答

198
假设您只想回到上一个版本,请使用alembic downgrade,并将相对迁移标识符设置为-1:
alembic downgrade -1

这将运行您最新版本的downgrade()方法,并更新alembic_version表以指示您现在所在的版本。

如果您需要回到多个迁移,请运行

alembic history

要查看项目中所有迁移的列表(从新到旧),然后复制并粘贴您想要返回的迁移的标识符:

alembic downgrade 8ac14e223d1e

目前没有命令可以从版本目录中{{删除}}迁移,因此,如果你想完全清除所有与错误迁移有关的痕迹,你需要手动删除版本文件(如4c009570237e_add_widget_table.py)。


在运行 alembic downgrade -1 命令时,出现了 FAILED: Relative revision -1 didn't produce 1 migrations 的错误提示。 - Santosh Kumar

6

Mark Amery的回答需要注意一点:

如果想要运行downgrade()将版本降级,需要运行alembic downgrade 要降级的版本的前一个版本,这意味着它将还原到想要降级的版本之后的版本。

例如,运行alembic history并得到以下列表:

enter image description here

假设要还原到cdd99ec41968,则需要运行以下命令:

alembic downgrade 15972effcbd3

这是我们想要还原的版本的前一个版本。

希望上述内容已经足够清晰易懂。


5

使用Alembic时要小心

考虑下一个版本:

aaa <-- head
bbb
ccc
ddd <-- base

如果你执行 alembic upgrade head,你将会到达 aaa 版本。

如果你执行 alembic downgrade base,你将会回到 ddd 版本。

如果你多次执行 alembic downgrade -1,最终你可以从 aaa 到达 ddd 版本。同样适用于 alembic upgrade +1

如果你只想在 aaabbb 之间迭代,我建议使用:

升级时:

 alembic upgrade head

用于降级

 alembic downgrade head-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接