在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

vae*_*r-k 8 python sqlalchemy python-3.x

使用 SQLAlchemy,我执行如下查询:

import models as m
import sqlalchemy as sa

s = session_maker()
q = s.query(m.ShareCount, m.Article)
.join(m.Article)
.filter(sa.and_(start < m.ShareCount.tstamp, m.ShareCount.tstamp < end))
Run Code Online (Sandbox Code Playgroud)

是在执行filter之前还是之后应用?join

vae*_*r-k -1

答案显然是,这取决于情况。

@univerio是正确的,sqlalchemy过滤器确实简单地转换为where,但查询的实际执行计划可能会被安排,以便首先应用过滤器。它仅取决于查询和优化器的实现。

我发现这个关于 WHERE 的 SQL 操作顺序的答案对于理解这一点最有帮助。