Flask-SQLAlchemy中的自我多对多关系查询
我有一个自我关联的多对多关系,也就是说,我的模型是用户(User),其中一个字段是朋友(friends),这个字段也是用户。虽然我已经建立了这个关系,但在查询某个用户的朋友时遇到了问题。我的模型和关系看起来是这样的:
friendship = db.Table('friends',
Column('friend_id', db.Integer, db.ForeignKey('monkeys.id')),
Column('myfriend_id', db.Integer, db.ForeignKey('monkeys.id'))
)
class Monkey (db.Model):
_tablename__ = "monkeys"
id = Column(Integer, primary_key=True)
username = Column(String(50), unique = True)
email = Column(String(120), unique = True)
password = Column(String(50))
date = Column (DateTime(), default=datetime.now())
friends = relationship('Monkey',
secondary = friendship,
primaryjoin = (friendship.c.friend_id == id),
secondaryjoin = (friendship.c.myfriend_id == id),
backref = backref('friendship', lazy = 'dynamic'),
lazy = 'dynamic')
在视图中,如果我想进行查询,我尝试了以下方法:
friends_list = Monkey.query.join(Monkey.friends).filter(Monkey.id == user.id).all()
但是它并没有成功... 有人能帮帮我吗?谢谢!
1 个回答
0
你不需要自己去创建连接。
把 lazy='joined' 改一下,这样项目会在和父对象同一个查询中“急切”地加载。
当你获取到 Monkey 对象时,你已经可以访问它的朋友了。
monkey = session.query(Monkey).get(user.id)
friends_list = monkey.friends