SQLALCHEMYでの自己参照
1397 ワード
SQLALCHEMYはadjacency list patternを用いてクラスの自己参照を表す.
たとえば、クラスノードの自己参照:
次の図に示す構成の場合:
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つ以上のカラムが含まれます.次のようになります.
原文:http://docs.sqlalchemy.org/en/rel_0_9/orm/self_referential.html
たとえば、クラスノードの自己参照:
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