sqlachemy UniqueConstraint有条件?

时间:2018-03-14 21:56:11

标签: python sqlalchemy

是否可以在表格上创建约束并在一个或多个列上指定值?考虑这个例子:

mytable = Table('mytable', meta,

    # per-column anonymous unique constraint
    Column('col1', Integer,),
    Column('col2', Integer),
    Column('col3', ENUM('ready', 'pass', 'fail'),

    UniqueConstraint('col2', 'col2', 'col3', name='uix_1')
    )

但是当col3等于“准备好”的状态时,我不仅仅想要唯一性。 (我希望多次成功或失败)。

    UniqueConstraint('col2', 'col2', 'col3 == ready', name='uix_1')

这可以在sqlalchemy api中使用吗?

2 个答案:

答案 0 :(得分:1)

因此,根据我的理解,只有当col3的值为' ready'?

时,您才希望该组(col1,col2,col3)是唯一的。

我认为使用唯一约束是不可能的。可以使用CheckConstraint完成,假设您的数据库支持它。

您可以阅读here

答案 1 :(得分:1)

link上有完整的示例:

class ExampleTable(Base):

    __tablename__ = 'example_table'
    __table_args__ = (
        Index(
            'ix_unique_primary_content',  # Index name
            'object_type', 'object_id',  # Columns which are part of the index
        unique=True,
        postgresql_where=Column('is_primary')),  # The condition
    )

    id = Column(Integer, primary_key=True)
    object_type = Column(Unicode(50))
    object_id = Column(Integer)
    is_primary = Column(Boolean)

因此您可以使用类似这样的内容:

Index(
    'col1', 'col2',  # Columns which are part of the index
    unique=True,
    postgresql_where=Column("col3='ready'")),  # The condition