如何在 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
有没有办法在 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