繁体   English   中英

SQLAlchemy 中的 Eager Inner Join

[英]Eager Inner Join in SQLAlchemy

我一定是个白痴,因为我不知道如何让 SQLAlchemy 执行一个简单的、非惰性的内部联接。 换句话说,在单个查询中返回所有结果。

我想运行的原始 SQL 查询是:

select
  city.population,
  state.name
from 
  city c inner join state s
    on c.state_id = s.id

我正在使用的 SQLAlchemy 语句是:

session.query(City.population, State.name).all()

City 和 State 模型已经定义了关系,并且 SQLAlchemy 语句返回正确的值。 但它需要永远,因为它正在为记录集中每一行的第二个值执行单独的“延迟”加载。 FROM 语句很简单: FROM city, state

  • 我已经尝试了各种配置的options(joinedload(something here))
  • 我读过“热切加载的禅”,我发现它没有帮助,因为它假设查询要求整个模型对象,而不是特定的列。
  • 我读了这个答案,其中说joinedload“意味着完全透明”,我不能同意这一点,因为它似乎需要重新安排核心查询。

我可能在这里有点偏离,但是您是否尝试过明确地传递连接条件?

q = session.query(City.population, State.name).join(State).all()

另外,假设您的目标是初始查询,您是否尝试过对sqlalchemy语法进行一些调整以实际获得相同的语句?

print (q.statement)

最后, Query类有一个方法enable_eagerloads() 文档

控制是否呈现急切连接和子查询。

当设置为 False 时,无论 joinload()、subqueryload() 选项或映射器级别的 lazy='joined'/lazy='subquery' 配置如何,返回的 Query 都不会呈现预先连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM