gpt4 book ai didi

python - SQLAlchemy 中的 Eager Inner Join

转载 作者:行者123 更新时间:2023-12-01 07:30:27 27 4
gpt4 key购买 nike

我一定是个白痴,因为我不知道如何要求 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()

城市和州模型已经定义了关系,并且 SQLAlchemy 语句返回正确的值。但这需要很长时间,因为它正在对记录集中每一行的第二个值进行单独的“惰性”加载。 FROM 语句很简单:FROM city, state

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

最佳答案

我可能有点偏离,但是你是否尝试过显式传递连接条件?

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

此外,假设您的目标是初始查询,您是否在 sqlalchemy 中尝试过一些调整语法实际上得到相同的语句?

print (q.statement)

最后,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.

关于python - SQLAlchemy 中的 Eager Inner Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57228262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com