如何在alembic迁移中处理异常?
我有一个叫做 alembic 的迁移脚本,我想加一些异常处理,但不太确定怎么做才是最佳的做法。
基本上,我有几个问题需要处理:
- 已经做过的更改不需要再做(比如说,如果我尝试添加一个列,而这个列已经存在了,我希望程序能继续运行,不要报错)
- 表被锁定(如果我尝试对一个表进行操作,但这个表被锁住了,我希望能抛出一个异常,提醒我)
还有其他的异常吗?
def upgrade(): engine = op.get_bind().engine op.add_column('t_break_employee', sa.Column('auto', sa.Boolean())) op.add_column('t_employee', sa.Column('settings', sa.Text()))
我考虑过在每次更改时使用一个类,配合 'with'
语句来处理。这听起来合理吗?
例如:
def upgrade():
engine = op.get_bind().engine
with my_test():
op.add_column('t_break_employee', sa.Column('auto', sa.Boolean()))
with my_test():
op.add_column('t_employee', sa.Column('settings', sa.Text()))
在这种情况下,我需要处理哪些异常?我怎么知道一个表是否被锁定了呢?
1 个回答
1
我不是在说你使用的API的具体问题,但我不建议你这样做。
其实,迁移(也就是把数据从一个地方转移到另一个地方)有两种结果:
- 迁移成功了
- 数据库回到了迁移之前的状态(这说明出现了某种错误)。
处理错误的正确方法是修复迁移。你现在的做法可能会导致第三种结果:
- 迁移失败了,但有些更改已经被应用了
这样会导致数据库结构损坏,这可不好!