如何处理alembic迁移中的异常?

时间:2014-06-06 06:56:41

标签: python sqlalchemy alembic

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

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

  1. 已经进行了更改,并且不需要(例如,如果我尝试 add_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()))
    
  4. 我考虑过在每次更改时添加一个与'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 个答案:

答案 0 :(得分:0)

我没有提及您使用的API的具体问题,但我不鼓励您采用这种方法。

真正的迁移有两个结果:

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

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

  • 迁移失败但已应用了一些更改

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