Я пытаюсь использовать SqlAlchemy для создания таблиц базы данных Sqlite внутри Pylons.Я использую декларативную базу для одновременного создания таблицы, класса и преобразователя с помощью следующего кода:
class Friends(Base):
__tablename__ = 'friends'
left_id = Column(Integer, ForeignKey('facebooks.id'), primary_key=True)
right_id = Column(Integer, ForeignKey('facebooks.id'), primary_key=True)
def __repr__(self):
return "<Friend(id:'%s' id: '%s')>" % (self.left_id, self.right_id)
class Facebook(Base):
__tablename__ = 'facebooks'
id = Column(Integer, primary_key=True)
friends = relationship("Facebook",
secondary=Friends.__tablename__,
primaryjoin= id == Friends.right_id,
secondaryjoin= Friends.left_id == id)
def __init__(self, id):
self.id = id
def __repr__(self):
return "<User(id:'%s')>" % (self.id)
Я просто изучаю все различные отношения , как и многиеодин, один ко многим, один к одному, и многие ко многим, и как реализовать каждый с таблицами и / или декларативно.Мне интересно, как мне связать объект с самим собой?Например, я хочу связать Facebook с другими Facebook.Другими словами, чтобы построить связи между ними и установить их как «друзей».Как бы я структурировал базу данных, чтобы сделать это возможным?
Редактировать: я изменил код, который я обновил выше, и я добавил объект ассоциации под названием «Друзья», но когда я добавляю другадля объекта facebook, он работает только в одном направлении.Если я добавлю Боба в друзья к Джону, я смогу увидеть Боба в John.Friends, но не смогу увидеть John в Bob.Friends.Что я делаю неправильно?Я попытался добавить следующие отношения в классе Друзья:
friend = relationship("Facebook", backref="friends")
, но получаю ошибку:
sqlalchemy.exc.ArgumentError: Не удалось определить условие соединения между родителем / дочерним элементомтаблицы на отношения Friends.friend.Укажите выражение «primaryjoin».Если присутствует «вторичный», также необходимо «вторичное соединение».