SQLAlchemy中的急切内部连接

2024-06-02 04:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我使用的SQLAlchemy语句是:

^{pr2}$

City和State模型已经定义了关系,SQLAlchemy语句返回正确的值。但这需要花费很长时间,因为它对记录集中每一行的第二个值执行单独的“延迟”加载。FROM语句只是:FROM city, state

  • 我尝试过options(joinedload(something here))的各种配置
  • 我读过“急切加载的禅”,我发现它没有帮助,因为它假设查询是针对整个模型对象,而不是特定的列。在
  • 我读过this answer,它说joinedload是“完全透明的”,我不同意,因为它似乎需要重新安排核心查询。在

Tags: namefrom模型idcitysqlsqlalchemy语句
1条回答
网友
1楼 · 发布于 2024-06-02 04:31:36

我可能有点不太清楚,但是您是否尝试过显式地传递连接条件?在

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

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

^{pr2}$

最后,Query类有一个方法enable_eagerloads()。从docs

Control whether or not eager joins and subqueries are rendered.

When set to False, the returned Query will not render eager joins regardless of joinedload(), subqueryload() options or mapper-level lazy='joined'/lazy='subquery' configurations.

相关问题 更多 >