1

我有一个 alembic 迁移脚本,我想添加一些异常处理,但不确定最佳实践是什么。

基本上,我有几个问题需要处理:

  1. 已经进行了更改并且不需要(例如,如果我尝试添加_column,并且该列已经存在,我希望它继续)
  2. 表被锁定(如果我尝试对表执行某些操作并且它被锁定,我想引发异常)
  3. 其他例外?

    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()))

在这种情况下,我需要处理哪些异常以及如何知道表是否被锁定?

4

1 回答 1

1

我不是指您使用的 API 的具体问题,但我不鼓励您使用这种方法。

真正的迁移有两个结果:

  • 迁移确实申请成功
  • 数据库在迁移之前处于状态(因此存在某种错误)。

处理错误的正确方法是修复迁移。您的方法是允许第三个迁移结果:

  • 迁移确实失败,但应用了一些更改

这将导致架构损坏,这是一件坏事!

于 2014-06-06T21:28:14.777 回答