为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过与 SQLAlchemy 的关系支持 ManyTableToManyTable?

如何通过与 SQLAlchemy 的关系支持 ManyTableToManyTable?

繁花如伊 2021-08-11 22:10:22
在我有一些表格来自第三个软件。class A:    id = Column(Integer, primary_key=True)class B:    id = Column(Integer, primary_key=True)class C:    id = Column(Integer, primary_key=True)class Link:    id = Column(Integer, primary_key=True)    src_id = Column(Integer)    src_type = Column(String)  # such as 'A', 'B', 'C'    dst_id = Column(Integer)    dst_type = Column(String)  # such as 'A', 'B', 'C'那么如何将参数传递给关系来支持这种结构呢?现在我的临时解决方案是:class Link:    ...    src_a = relationship(A, foreign_keys=[src_id, src_type], primary_join=(src_type=='A') & (src_id = A.id))    src_b = relationship(B, foreign_keys=[src_id, src_type], primary_join=(src_type=='B') & (src_id = B.id))    src_c = relationship(C, foreign_keys=[src_id, src_type], primary_join=(src_type=='C') & (src_id = C.id))    dst_a = relationship(A, foreign_keys=[dst_id, dst_type], primary_join=(dst_type=='A') & (dst_id = A.id))    dst_b = relationship(B, foreign_keys=[dst_id, dst_type], primary_join=(dst_type=='B') & (dst_id = B.id))    dst_c = relationship(C, foreign_keys=[dst_id, dst_type], primary_join=(dst_type=='C') & (dst_id = C.id))session.query(A, B).join(Link, Link.src_a.expression).join(B, Link.dst_b.expression)但是,是的,这是无法维护的。
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这看起来就像一般关系的sqlalchemy_utils,通过它可以有:


from sqlalchemy_utils import generic_relationship


class Link:

    ...

    src = generic_relationship(src_type, src_id)

    dst = generic_relationship(dst_type, dst_id)


查看完整回答
反对 回复 2021-08-11
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号