Flask-SQLAlchemy中的自我多对多关系查询

1 投票
1 回答
1187 浏览
提问于 2025-04-18 05:24

我有一个自我关联的多对多关系,也就是说,我的模型是用户(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 

撰写回答