问题 Alembic + Sqlalchemy多列唯一约束


我正在尝试使用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自动生成?

感谢您的帮助。


6371
2018-04-27 16:02


起源



答案:


我遇到了同样的问题,发现如果你使用声明性模型定义表,你可以添加唯一约束 __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


11
2017-10-07 20:42