撤消上次 Alembic 迁移

问题描述 投票:0回答:4

我用

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

如何恢复迁移以便我可以调整它并重试?

python sqlalchemy alembic
4个回答
230
投票

假设您只想返回 one 修订版,请使用

alembic downgrade
以及 相对迁移标识符 为 -1:

alembic downgrade -1

这将运行最新版本的

downgrade()
方法并更新
alembic_version
表以指示您现在所在的版本。

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

alembic history

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

alembic downgrade 8ac14e223d1e

目前没有命令可以从版本目录中删除迁移,因此如果您想完全清除错误迁移的所有痕迹,则需要手动删除版本文件(如

4c009570237e_add_widget_table.py
)。


9
投票

仅对马克·阿默里(Mark Amery)的回答进行注释:

如果你想运行某个版本的 downgrade(),你需要运行

alembic downgrade the-version-before-it
,这意味着它将恢复到你想要降级的版本之后的版本。

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

enter image description here

假设您想恢复到

cdd99ec41968
,那么您将必须运行命令:

alembic downgrade 15972effcbd3

我们要恢复的版本之前的版本是哪个。

希望它足够清楚。


8
投票

使用alembic时要小心

考虑下一次修订:

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

如果您执行

alembic upgrade head
,您将进行
aaa
修订。

如果您执行

alembic downgrade base
,您将进行
ddd
修订。

如果您执行多次

alembic downgrade -1
,最终您可以从
aaa
转到
ddd
修订。同上
alembic upgrade +1

如果您只想在

aaa
bbb
修订版之间进行迭代,我建议使用:

升级:

 alembic upgrade head

降级

 alembic downgrade head-1

0
投票

是的,在“在线”情况下请降级,但还有一个技巧,只需在离线时删除不需要的版本文件即可将“head”绑定回“base”。例如,偶尔我会创建修订版,然后在之前将其删除

alembic upgrade

version

poc-2

poc-1

© www.soinside.com 2019 - 2024. All rights reserved.