sqlalchemy 限制从第一次连接返回的结果,并让后续连接只连接有限的结果

Posted

技术标签:

【中文标题】sqlalchemy 限制从第一次连接返回的结果,并让后续连接只连接有限的结果【英文标题】:sqlalchemy limit the results returned from first join and have subsequent joins only join on the limited results 【发布时间】:2019-09-16 21:03:00 【问题描述】:

不运行子查询。有没有办法使用 sqlalchemy 限制查询中特定连接的结果,以便查询中的任何后续连接只连接这些结果?比如我想要第一个join的前5个结果,然后在第一个结果上join第二个表。

我尝试在中间坚持限制,希望 ORM 能理解,但这不起作用

result = t1.query.filter_by(
                field1="something"
            ).join(
                t2, t1.id == t2.other_id
            ).limit(5).join(
                t3, t2.id == t3.other_id
            ).add_columns(
                t1.title
            ).all()

这可能是一个一般性的 SQL 问题,因为我是 SQL 新手,不知道是否可以在没有子查询的情况下执行此操作。

【问题讨论】:

为什么要避免使用子查询? 【参考方案1】:

是的,这可以通过subquery 来完成:

subquery = t1.query.filter_by(field1="something").subquery()

query = t1.outerjoin(
    sub_query,
    and_(sub_query.c.some_column == t1.some_column)
)

【讨论】:

以上是关于sqlalchemy 限制从第一次连接返回的结果,并让后续连接只连接有限的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何将 LINQ 左外连接限制为一行

从 SQLalchemy Flask 中的连接表返回填充字段

如何从 SQLAlchemy JOIN 中的两个表返回结果?

如何限制/抵消 sqlalchemy orm 关系的结果?

使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据框

如何将 SqlAlchemy 结果序列化为 JSON?