Alembic + Sqlalchemy 多列唯一约束

22

我正在尝试使用SQLAlchemy创建一个多列唯一约束,该约束将被Alembic自动升级脚本生成器捕捉到。

我已经在我的模型中使用from 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个回答

33

我曾经遇到过相同的问题,并发现如果您使用声明式模型定义表格,您可以将唯一约束添加到__table_args__中,然后Alembic将会识别它:

```html

我曾经遇到过相同的问题,并发现如果您使用声明式模型定义表格,您可以将唯一约束添加到__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


3

我可以确认:

....
        __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 ###

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接