SQLALCHEMYでの自己参照

1397 ワード

SQLALCHEMYはadjacency list patternを用いてクラスの自己参照を表す.
たとえば、クラスノードの自己参照:
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
自己参照が1対以上であっても、複数対1であっても、通常は1対以上がデフォルトです.多対一の関係を確立するにはrelationship()にremote_を追加する必要があります.Sideプロパティ、remote_Sideプロパティには、1つ以上のカラムが含まれます.次のようになります.
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