繁体   English   中英

SQLAlchemy:FROM条目仍存在于相关子查询中

[英]SQLAlchemy: FROM entry still present in correlated subquery

我正在尝试使用SQLAlchemy构建以下查询(用作包含包含名为tbl_outer别名的包含查询的子查询):

SELECT max(tbl.ts) AS max_1
FROM tbl
WHERE tbl.id = tbl_outer.id

在阅读文档时,防止tbl_outer引用出现在FROM子句中的正确方法是query = query.correlate(tbl_outer) 但是,相反,我正在获取此信息,好像根本没有调用correlate()一样:

SELECT max(tbl.ts) AS max_1
FROM tbl, tbl AS tbl_outer
WHERE tbl.id = tbl_outer.id

最小的复制器如下:

import sqlalchemy as sa
import sqlalchemy.orm as sa_orm

engine  = sa.create_engine('sqlite:///memory')
meta    = sa.MetaData(bind=engine)
table   = sa.Table('tbl', meta, sa.Column('id', sa.Integer), sa.Column('ts', sa.Integer))
session = sa_orm.sessionmaker(bind=engine)()
meta.create_all()

tbl_outer = table.alias('tbl_outer')

subquery = session.query(sa.func.max(table.columns.ts)).filter(table.columns.id == tbl_outer.columns.id)

print "=== BEFORE CORRELATION:"
print str(subquery)

print "=== AFTER CORRELATION:"
print str(subquery.correlate(tbl_outer))

当我阅读相关文件的文档以及在StackOverflow上描述其正确用法的其他答案时 ,我希望这个correlate(tbl_outer)调用将从生成的SQL的FROM子句中删除tbl AS tbl_outer 但是,实际上并没有这样做。

我已经使用SQLAlchemy 1.0.8收到了以上结果。 我想念什么?

这是SQLAlchemy 0.8中引入的功能而不是错误。

在0.8之前,SQLAlchemy可能会生成不会解析为有效SQL的内容。 0.8之后, 仅在context中执行关联

在我的真实代码中,我正在测试代码,这些代码通过脱离上下文为外部查询生成WHERE子句。 从SQLAlchemy 0.8开始,只能保证WHERE子句能在较大的准确上下文中准确呈现为文本。

暂无
暂无

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

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