SQLAlchemy 中的 Eager Inner Join

Eager Inner Join in SQLAlchemy

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

我想要 运行 的原始 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 语句 return 是正确的值。但这需要永远,因为它正在对记录集中每一行的第二个值进行单独的 "lazy" 加载。 FROM 语句很简单:FROM city, state

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

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

此外,假设您的 objective 是初始查询,您是否尝试过对 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.