SQLAlchemy很多:很多关系,设置表项的唯一性

时间:2013-01-09 09:03:53

标签: python postgresql sqlalchemy

我正在使用SQLAlchemy和Postgres以及声明基础,并且有这种多对多关系:

user_trait_association = Table('user_trait', Base.metadata,
    Column('user_id', Integer, ForeignKey('user.id')),
    Column('trait_id', Integer, ForeignKey('trait.id'))
)

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    trait = relationship('SomeTrait', backref='user')

class SomeTrait(Base):
    __tablename__ = 'sometrait'
    id = Column(Integer, primary_key=True)
    detail1 = Column(String)
    detail2 = Column(String)

我的问题:如何设置它以使特征变得独特 - 也就是说,细节1 =眼睛颜色,细节2 =头发颜色......我怎么写它以使鲍勃和吉姆谁它们都有黑色的头发和棕色的眼睛(结合为2个细节的一个独特特征 - 比方说,亚洲人)。现在,当我保存到数据库时,它会生成许多相同细节的特征 - 表中有许多单独的亚洲(黑发,棕色眼睛)条目,当我想要的是将所有内容集中在一个特征下。

我不确定我是否清楚地描述了这一点;如果我需要改写,请告诉我。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望对一组列有UNIQUE约束?如果是这样,那么这样的事情就可以解决问题:

class SomeTrait(Base):
    __tablename__ = 'sometrait'
    id = Column(Integer, primary_key=True)
    detail1 = Column(String)
    detail2 = Column(String)
    __table_args__ = (
        UniqueConstraint('detail1', 'detail2'),
    )