如何在 alembic 中使用 postgres 排除约束

How to work with postgres exclusion constraints in alembic

有没有办法在 Alembic 中创建带有 postgresql 排除约束的 table 而无需编写文字 SQL?

例如,考虑这个 table:

CREATE TABLE reservation (
during tsrange,
EXCLUDE USING gist (during WITH &&)
);

排除约束似乎不属于 alembic 中可用的约束类型。

因为 SQLAlchemy 支持 ExcludeConstraints

from sqlalchemy.dialects.postgresql import ExcludeConstraint, TSRANGE

class RoomBooking(Base):

    __tablename__ = 'room_booking'

    room = Column(Integer(), primary_key=True)
    during = Column(TSRANGE())

    __table_args__ = (
        ExcludeConstraint(('room', '='), ('during', '&&')),
    )

但 alembic 似乎无法识别它们,我想知道是否有其他方法可以在我的架构修订历史记录中反映此类排除约束。

运行成同样的问题。 alembic 中的解:

您需要在脚本顶部导入排除约束:

from sqlalchemy.dialects.postgresql import ExcludeConstraint

op.create_table('mission_event_schedule',
                   sa.Column('id', sa.Integer(), nullable=False),
                   sa.Column('ts_range', postgresql.TSTZRANGE(), nullable=True),
                   sa.PrimaryKeyConstraint('id'),
                   ExcludeConstraint(('ts_range','&&'))
                   )

如果您想使用 ExcludeConstraint 更新现有 table,版本 0.9 有 create_exclude_constraint。 参考:create_exclude_constraint