根据后端跳过alembic修订版

时间:2016-11-09 15:38:56

标签: python sqlalchemy alembic

我在Alembic中有一个版本,它取决于特定的后端,但语义并没有明确依赖它(只会使事情变得更快)。

我希望我的代码不依赖于特定的后端(即修订版在运行时不会出错)。我应该在def upgrade():def downgrade():上写什么条件才能对其他后端运行修订?

我正在考虑的特定示例:以下修订仅在postgres中有效。但是,应用程序仍将以sqllite运行:

def upgrade():
    op.execute('CREATE EXTENSION pg_trgm') # requires being superuser
    op.execute('CREATE INDEX ix_document_id ON document USING gin (id gin_trgm_ops)')

def downgrade():
    op.execute('DROP INDEX ix_document_id')
    op.execute('DROP EXTENSION pg_trgm')

原样,这个sqllite中的错误。

1 个答案:

答案 0 :(得分:1)

虽然可能有更好的方法在Alembic中创建条件操作,但最简单的方法之一就是保护基于当前方言的迁移操作:

...

from alembic import context

...


def upgrade():
    if context.get_impl().bind.dialect.name == "postgresql":
        pass
    pass


def downgrade():
    if context.get_impl().bind.dialect.name == "postgresql":
        pass
    pass