在我有一些表格来自第三个软件。
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)
但是,是的,这是无法维护的。
慕哥6287543
相关分类