首页 > 解决方案 > 在 SQLAlchemy 中过滤大型关系子查询

问题描述

考虑一个具有关系的简单 SQLAlchemy 模型:

class User(Base):

    __tablename__ == 'users'

    friends = relationship('User', secondary=friend,
        primaryjoin=id == friend.c.to_id,
        secondaryjoin=id == friend.c.from_id,
        order_by=friends.c.id,
        lazy='subquery')

在某些病态的情况下,用户可能有很多朋友,因此使这个查询非常昂贵:

user_friends = user.friends

如何执行相同的子查询,但例如请求特定对象order_by并限制N对象?我想做类似的事情:

some_friends = user.friends.order_by('some_field').limit(10)

但我无法从文档中了解如何在 subquery 上配置这些查询选项。

停止将这个问题标记为重复,所谓的重复问题与处理子查询无关。

标签: pythonpython-3.xsqlalchemy

解决方案


事实上,根据@malan 的建议,如果没有明确需要,使用lazy='dynamic'是这种情况下最简单的解决方案。subquery


推荐阅读