Alembic + Sqlalchemy Multi Column Уникальное ограничение

Я пытаюсь создать с использованием sqlalchemy уникальное ограничение нескольких столбцов, которое будет подхвачено Alembic в его генераторе автоматического обновления script.

Я создаю ограничение, используя:

из sqlalchemy import UniqueConstraint в моей модели

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

Однако, это не подхвачено Alembic в его автоматическом поколении script.

Я могу вручную создать это в Alembic script, добавив.

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

Есть ли способ автоматически генерировать это с помощью Alembic?

Благодарим вас за помощь.

Ответ 1

Я столкнулся с той же проблемой и обнаружил, что если вы определяете таблицу с помощью декларативной модели, вы можете добавить к ней уникальное ограничение на __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