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 限制从第一次连接返回的结果,并让后续连接只连接有限的结果的主要内容,如果未能解决你的问题,请参考以下文章
从 SQLalchemy Flask 中的连接表返回填充字段
如何从 SQLAlchemy JOIN 中的两个表返回结果?