Alembic + Sqlalchemy多列独特约束

时间:2016-04-27 16:02:25

标签: python flask-sqlalchemy alembic

我尝试使用sqlalchemy创建一个多列唯一约束,Alembic将在其自动升级脚本生成器中捕获该约束。

我使用以下方法创建约束:

来自我模型中的sqlalchemy import UniqueConstraint

UniqueConstraint('col1', 'col2', 'number', name='uix_table_col1_col2_col3')

然而,Alembic在其自动脚本生成中没有提到这一点。

我可以通过添加来在Alembic脚本中手动创建它。

op.create_unique_constraint('uq_table_col1_col2_col3', 'table', ['col1', 'col2', 'col3'])

有没有办法让Alembic自动生成?

感谢您的帮助。

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题,发现如果您使用声明性模型定义表格,可以将唯一约束添加到__table_args__,而Alembic会选择它:

class MyClass(Base):
    __tablename__ = 'table'
    __table_args__ = (
        UniqueConstraint('col1', 'col2', 'number', name='uix_table_col1_col2_col3'),
    )

http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/table_config.html

答案 1 :(得分:1)

我可以确认:

....
        __table_args__ = (UniqueConstraint('col1', 'col2'),)
....

将以下内容添加到 alembic 升级文件:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_unique_constraint(None, 'instruments', ['col1', 'col2'])
    # ### end Alembic commands ###