Я хочу отобразить объект Тега с помощью декларативного метода с SQLAlchemy. Тег может иметь родителя (другой Тег).
Я имею:
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True)
label = Column(String)
def __init__(self, label, parentTag=None):
self.label = label
Как я могу добавить "родительские" отношения?
Вы добавляете ForeignKey
, ссылающийся на родителя, а затем создаете отношение, определяющее направление через remote_side
. Это документировано в разделе adjacency list relationships. Для декларативного варианта вы сделаете примерно следующее:
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True)
label = Column(String)
parent_id = Column(Integer, ForeignKey('tag.id'))
parent = relationship('Tag', remote_side=[id])
Если вам нужно и обратное отношение, добавьте backref='children'
к определению отношения.
parent = Relations ('Тег')
- см. http://www.sqlalchemy.org/docs/05/reference/ext/declarative.html#configuring-relations .