是否可以在表格上创建约束并在一个或多个列上指定值?考虑这个例子:
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中使用吗?
答案 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