0

私はPostgresと宣言型ベースでSQLAlchemyを使用しており、この多対多の関係に沿った何かを持っています。

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)

私の質問:特性が一意になるように設定するにはどうすればよいですか?つまり、detail1 =目の色、detail2 =髪の色...両方とも黒のボブとジムのように書くにはどうすればよいですか?髪と茶色の目(2つの詳細の1つのユニークな特性として組み合わされます-たとえば、アジア人)。現在、データベースに保存すると、同じ詳細の多くの特性が生成されます。テーブルには、多くの個別のアジア(黒髪、茶色の目)のエントリがあります。必要なのは、すべてを1つの特性にまとめることです。

これを明確に説明しているかどうかはわかりません。言い換える必要がある場合はお知らせください。

4

1 に答える 1

2

私があなたを正しく理解しているなら、あなたUNIQUEは列のグループに制約が欲しいですか?もしそうなら、このようなものがトリックを行う必要があります:

class SomeTrait(Base):
    __tablename__ = 'sometrait'
    id = Column(Integer, primary_key=True)
    detail1 = Column(String)
    detail2 = Column(String)
    __table_args__ = (
        UniqueConstraint('detail1', 'detail2'),
    )
于 2013-01-09T11:41:29.320 に答える