Nextrp [CPP] RU + Many GEOs Игра на карте России | NEXTRP

Само-ссылочные отношения многие-ко-многим в sqlalchemy

many-to-many sqlalchemy relationship self-reference

3018 просмотра

1 ответ

56 Репутация автора

Я пытаюсь сделать самореферентное отношение «многие ко многим» (это означает, что в строке может быть много родительских строк и много дочерних строк) в sqlalchemy:

Base = declarative_base()

class Association(Base):
 __tablename__ = 'association'

 prev_id = Column(Integer, ForeignKey('line.id'), primary_key=True)                            
 next_id = Column(Integer, ForeignKey('line.id'), primary_key=True)


class Line(Base):
 __tablename__ = 'line'

 id = Column(Integer, primary_key = True)
 text = Column(Text)
 condition = Column(Text)
 action = Column(Text)

 next_lines = relationship(Association, backref="prev_lines")



class Root(Base):
 __tablename__ = 'root'

 name = Column(String, primary_key = True)
 start_line_id = Column(Integer, ForeignKey('line.id'))

 start_line = relationship('Line')

Но я получаю следующую ошибку: sqlalchemy.exc.ArgumentError: Не удалось определить условие соединения между родительскими / дочерними таблицами в отношении Line.next_lines. Укажите выражение «primaryjoin». Если «вторичный» присутствует, «вторичное соединение» также необходимо.

Вы знаете, как я мог это исправить?

Автор: mike Источник Размещён: 14.11.2010 11:23

Ответы (1)


6 плюса

12666 Репутация автора

Вам просто нужно:

prev_lines = relationship(Association,
backref="next_lines",
primaryjoin=id==Association.prev_id)

Так как это указывает next_linesобратную ссылку, нет необходимости иметь next_linesотношения.

Вы также можете сделать это, используя remote_sideпараметр отношения: http://www.sqlalchemy.org/trac/browser/examples/adjacency_list/adjacency_list.py

Автор: Nathan Villaescusa Размещён: 17.11.2010 03:06
Вопросы из категории :
32x32