簡體   English   中英

通過2個多對多表的SQLAlchemy關系

[英]SQLAlchemy relationship through 2 many-to-many tables

我有以下型號:

class A(Base):
    __tablename__ = 'A'

    a_id = Column(Integer, primary_key=True)


class B(Base):
    __tablename__ = 'B'

    b_id = Column(Integer, primary_key=True)


class C(Base):
    __tablename__ = 'C'

    c_id = Column(Integer, primary_key=True)

class AB(Base):
    __tablename__ = 'A_B'

    a_id = Column(Integer, ForeignKey(A.a_id), primary_key=True)
    b_id = Column(Integer, ForeignKey(B.b_id), primary_key=True)


class BC(Base):
    __tablename__ = 'B_C'

    b_id = Column(Integer, ForeignKey(B.b_id), primary_key=True)
    c_id = Column(Integer, ForeignKey(C.c_id), primary_key=True)

我想要的是使用多對多表b_id作為連接器列在A和C之間添加關系。 我知道當通過一個多對多表存在關系時,可以使用seconday和secondaryjoin來做到這一點,但是我不知道如何使用2個多對多表來做到這一點。

我想要這樣的東西:

class A(Base):
    a_id = Column(Integer, primary_key=True)
    c_colletion = relationship(?)

您可以使用自定義的輔助:

ab = AB.__table__
bc = BC.__table__
ac = select([ab.c.a_id, bc.c.c_id]).select_from(ab.join(bc, ab.c.b_id == bc.c.b_id))

A.c_collection = relationship("C", secondary=ac,
                              primaryjoin=A.a_id == ac.c.a_id,
                              secondaryjoin=ac.c.c_id == C.c_id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM