SqlAlchemy:如何在用户之间建立联系,即结交“朋友”

|| 我正在尝试使用SqlAlchemy在Pylons中创建Sqlite数据库表。我使用声明性基础通过以下代码一次创建表,类和映射器:
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相关联。换句话说,建立它们之间的连接,并将它们建立为“朋友”。我将如何构建数据库以使其成为可能? 编辑:我更改了上面更新的代码,并添加了一个名为\“ Friends \”的关联对象,但是当我向Facebook对象添加朋友时,它仅在一个方向上起作用。如果我将Bob添加为John的朋友,则可以在John.Friends中看到Bob,但是在Bob.Friends中看不到John。我究竟做错了什么?我尝试在Friends类中添加以下关系:
friend = relationship(\"Facebook\", backref=\"friends\")
但我得到一个错误: sqlalchemy.exc.ArgumentError:可以 无法确定之间的连接条件 父/子关系表 老友记指定一个 \'primaryjoin \'表达式。如果 \'secondary \'存在, 也需要使用“ secondaryjoin \”。
已邀请:
这与1:N或N:M关系有何不同?将朋友关系存储在表isFriend(user1_id,user2_id)中很简单。如果您将友谊关系视为图表,请检查以下内容:http://www.sqlalchemy.org/docs/orm/examples.html#directed-graphs

要回复问题请先登录注册