Python SQLALCHEMY-多对多一元关系

Python SQLALCHEMY-多对多一元关系,python,postgresql,flask,sqlalchemy,flask-sqlalchemy,Python,Postgresql,Flask,Sqlalchemy,Flask Sqlalchemy,我有一个名为Node的表。每个节点都有许多node类型的子节点。此外,节点对象有许多父对象。我还做了一个算法来查找兄弟节点(父节点相似的节点) 怎么做?我要为他们单独安排一张桌子吗?还是在同一张桌子上?下面是我如何尝试去做,但显然失败了: class Node(Model): id = Column(String, primary_key=True) name = Column(String) parent_id = db.Column(db.String, db.For

我有一个名为Node的表。每个节点都有许多node类型的子节点。此外,节点对象有许多父对象。我还做了一个算法来查找兄弟节点(父节点相似的节点)

怎么做?我要为他们单独安排一张桌子吗?还是在同一张桌子上?下面是我如何尝试去做,但显然失败了:

class Node(Model):
    id = Column(String, primary_key=True)
    name = Column(String)
    parent_id = db.Column(db.String, db.ForeignKey('node.id'))

    children = db.relationship('node', remote_side=[id], uselist=True)
    parents = db.relationship('node', remote_side=[id], uselist=True)
    siblings = db.relationship('node', remote_side=[id], uselist=True)
我不知道怎样才能做到这一点


实际上,我考虑过对这个节点对象使用graphDB。和其他使用经典SQL的表,但我不确定是否值得大惊小怪

虽然我还不知道如何实现“兄弟”关系,但下面是如何拥有许多自引用多对多关系:

Connection = Table('connection',
    Column('child_id', String, ForeignKey('node.id')),
    Column('parent_id', String, ForeignKey('node.id')),
    UniqueConstraint('parent_id', 'child_id', name='unique_usage')
)


class Node(Model):
    id = Column(String, primary_key=True)
    name = Column(String)

    # this is the result list of type Node 
    # where the current node is the "other party" or "child"
    parents = relationship('Node', secondary=Connection, 
                            primaryjoin=id == Connection.c.parent_id,
                            secondaryjoin=id == Connection.c.child_id)

    # this is the result list of type Node 
    # where the current node is the "parent" 
    children = relationship('Node', secondary=Connection, 
                            primaryjoin=id == Connection.c.child_id,
                            secondaryjoin=id == Connection.c.parent_id)
基本上,对于每个想要的多对多关系,制作表示该关系的表,然后将该关系添加到模块中。它们中的每一个都可以有双向关系


当我想知道如何制作兄弟姐妹时,我会编辑我的答案。

你想实现吗?@daveruinseverything不太可能。根据文档,邻接列表是“树状的”。我想要一个“类似图形”的结构。根据你提供的建议。每个节点都有一个父节点,我希望每个节点都有多个父节点