相关(对于无关联对象用例):SQLAlchemy Many-to-Many Relationship on a Single Table
建立多对多关系很容易。在同一个表上建立多对多关系几乎同样容易,如上述问题所述。
与关联对象建立多对多关系也很容易。
我似乎无法找到合并关联对象和左右两侧多对多关系的正确方法。
所以,从简单,天真,明显错误的版本开始,我已经花了很长时间试图按下正确的版本:
t_groups = Table('groups', metadata,
Column('id', Integer, primary_key=True),
)
t_group_groups = Table('group_groups', metadata,
Column('parent_group_id', Integer, ForeignKey('groups.id'), primary_key=True, nullable=False),
Column('child_group_id', Integer, ForeignKey('groups.id'), primary_key=True, nullable=False),
Column('expires', DateTime),
)
mapper(Group_To_Group, t_group_groups, properties={
'parent_group':relationship(Group),
'child_group':relationship(Group),
})
映射此关系的正确方式是什么?
答案 0 :(得分:6)
我猜您收到的错误如Could not determine join condition between parent/child tables...
在这种情况下,请将Group_To_Group
的映射器更改为以下内容:
mapper(Group_To_Group, t_group_groups, properties={
'parent_group':relationship(Group,
primaryjoin=(t_group_groups.c.parent_group_id==t_groups.c.id),),
'child_group':relationship(Group,
primaryjoin=(t_group_groups.c.child_group_id==t_groups.c.id),),
})
您也可以添加backref
,以便也可以从Group
对象导航关系。