gpt4 book ai didi

python - SQLAlchemy 通过 2 个多对多表建立关系

转载 作者:行者123 更新时间:2023-12-01 02:38:20 25 4
gpt4 key购买 nike

我有以下型号:

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 之间的关系。我知道当通过一个多对多表存在关系时,我可以使用 secondary 和 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)

关于python - SQLAlchemy 通过 2 个多对多表建立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com