Estoy tratando de usar SqlAlchemy para hacer tablas de bases de datos Sqlite dentro de Pylons. Estoy usando la base declarativa para crear la tabla, clase y asignador de todos a la vez con el siguiente código:SqlAlchemy: Cómo crear conexiones entre usuarios, es decir, crear "amigos"
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)
sólo estoy aprendiendo sobre todos los diferentes relationships como muchos a uno, uno a muchos, uno a uno, y muchos a muchos y cómo implementar cada uno con tablas y/o de manera declarativa. Me pregunto, ¿cómo puedo asociar un objeto consigo mismo? Por ejemplo, quiero asociar facebooks con otros facebook. En otras palabras, para construir conexiones entre ellos y establecerlos como "amigos". ¿Cómo estructuraría la base de datos para que esto sea posible?
Editar: Cambié el código, que he actualizado anteriormente, y he agregado un objeto de asociación llamado "Amigos", pero cuando agrego un amigo a un objeto de Facebook, solo funciona en una dirección. Si agrego a Bob como amigo a John, puedo ver a Bob en John.Friends, pero no puedo ver a John en Bob.Friends. ¿Qué estoy haciendo mal? He intentado añadir la siguiente relación en la clase Amigos:
friend = relationship("Facebook", backref="friends")
pero me da un error:
sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/child tables on relationship Friends.friend. Specify a 'primaryjoin' expression. If 'secondary' is present, 'secondaryjoin' is needed as well.