SQLAlchemy通过2个多表建立关系

2024-04-26 00:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

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)

我想在a和C之间添加一个关系,使用多对多表b\u id作为joiner列。我知道我可以使用seconday和secondaryjoin在一个多对多表之间建立关系时完成,但是我不知道如何使用2个多对多表来完成。你知道吗

我想要这样的东西:

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

Tags: keyidtruebaseab关系columninteger
1条回答
网友
1楼 · 发布于 2024-04-26 00:16:37

您可以使用自定义辅助服务器:

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)

相关问题 更多 >