gpt4 book ai didi

python - SqlAlchemy:如何在用户之间创建连接,即 make "friends"

转载 作者:太空狗 更新时间:2023-10-30 00:15:29 25 4
gpt4 key购买 nike

我正在尝试使用 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)

我只是在了解所有不同的 relationships像多对一、一对多、一对一和多对多,以及如何用表和/或声明地实现每一个。我想知道,如何将一个对象与其自身相关联?例如,我想将 facebooks 与其他 facebooks 关联起来。换句话说,就是在他们之间建立联系,建立他们之间的“ friend ”关系。我将如何构建数据库以使其成为可能?

编辑:我更改了上面更新的代码,并且添加了一个名为“ friend ”的关联对象,但是当我将 friend 添加到 facebook 对象时,它只能在一个方向上起作用。如果我将 Bob 添加为 John 的 friend ,我可以在 John.Friends 中看到 Bob,但在 Bob.Friends 中看不到 John。我究竟做错了什么?我尝试在 Friends 类中添加以下关系:

friend = relationship("Facebook", backref="friends")

但是我得到一个错误:

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.

最佳答案

这与 1:N 或 N:M 关系有何不同?将 friend 关系存储在表 isFriend(user1_id, user2_id) 中很简单。如果您将友谊关系视为图表,请查看:http://www.sqlalchemy.org/docs/orm/examples.html#directed-graphs

关于python - SqlAlchemy:如何在用户之间创建连接,即 make "friends",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com