SQLALCHEMY中的自引用

SQLALCHEMY采用adjacency list pattern来表示类的自引用。

例如,对于类Node自引用:

class Node(Base):
    __tablename__='node'
    id=Column(Integer,primary_key=True)
    parent_id=Column(Integer,ForeignKey('node.id'))
   data=Column(String(50))
    children=relationship('Node')

对于如下图所示的结构:

    root--------------->child1

                     -------->child2---------->subchild1

                                            ---------->subchild2

                     -------->child3

可能有如下数据:

id            parent_id          data

1                NULL              root

2                  1                  child1

3                  1                  child2

4                  3                  subchild1

5                  3                 subchild2

6                  1                  child3

无论自引用是一对多还是多对一,通常默认是一对多。如果想建立多对一的关系,需要在relationship()中添加remote_side属性,remote_side属性包含一列或多列。如:

class Node(Base):
    __tablename__='node'
    id=Column(Integer,primary_key=True)
    parent_id=Column(Integer,ForeignKey('node.id'))
    data=Column(String(50))
    parent=relationship("Node",remote_side=[id])

原文:http://docs.sqlalchemy.org/en/rel_0_9/orm/self_referential.html

你可能感兴趣的:(SQLALCHEMY中的自引用)