问题描述
||
我正在尝试使用sqlAlchemy在Pylons中创建sqlite数据库表。我使用声明性基础通过以下代码一次创建表,类和映射器:
class Friends(Base):
__tablename__ = \'friends\'
left_id = Column(Integer,ForeignKey(\'facebooks.id\'),primary_key=True)
right_id = Column(Integer,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