SQLAlchemy中从表到自身的多对多关系

时间:2013-05-19 06:32:19

标签: python sql sqlalchemy

我正在使用SQLAlchemy来表示作者之间的关系。我想让作者与其他作者(coauthorshp)相关,在关系中有额外的数据,这样作者a我可以找到他们的合作者。

如何在两个不同的对象之间完成此操作:

class Association(Base):
    __tablename__ = 'association'
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
    extra_data = Column(String(80))
    child = relationship('Child', backref='parent_assocs')

class Parent(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    children = relationship('Association', backref='parent')

class Child(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)

但在我的情况下我该怎么办呢?

合着的本质是它是双向的。因此,当您通过coauthoship对象将元组(id_left, id_right)插入到coauthorship表中时,是否还有一种方法可以轻松插入反向关系?我问,因为我想使用关联代理。

1 个答案:

答案 0 :(得分:0)

如果你想在association中确实有一对行,也就是说,对于插入的每个id_left, id_right,你也插入一个id_right, id_left,你会使用一个{ {3}}监听任何一方的追加事件,并在另一个方向产生追加。

如果您只想在两个方向上的父/子之间导航,只需一行id_left, id_right即可。关于这种映射的文档中的示例说明了整个事情。