我正在尝试将此SQL查询转换为Flask-sqlAlchemy调用:
SELECT *
FROM "ENVOI"
WHERE "ID_ENVOI" IN (SELECT d."ID_ENVOI"
FROM "DECLANCHEMENT" d
WHERE d."STATUS" = 0
AND d."DATE" = (SELECT max("DECLANCHEMENT"."DATE")
FROM "DECLANCHEMENT"
WHERE "DECLANCHEMENT"."ID_ENVOI" = d."ID_ENVOI"))
如您所见,它使用子查询,最重要的是,其中一个子查询是一个相关查询(它使用外部查询中定义的d表).
我知道如何使用子查询和子查询()函数,但我找不到与sqlAlchemy相关的查询的文档.你知道办法吗?
解决方法:
我们可以.
from sqlalchemy import select, func, table, Column, Integer
table1 = table('table1', Column('col', Integer))
table2 = table('table2', Column('col', Integer))
subquery = select(
[func.if_(table1.c.col == 1, table2.c.col, None)]
).correlate(table1)
query = (
select([table1.c.col,
subquery.label('subquery')])
.select_from(table1)
)
if __name__ == '__main__':
print(query)
将导致以下查询
SELECT table1.col, (SELECT if(table1.col = :col_1, table2.col, NULL) AS if_1
FROM table2) AS subquery
FROM table1
如您所见,如果您在select上调用correlate,则不会将给定的表添加到它的FROM子句中.
即使直接指定select_from,也必须这样做,因为sqlAlchemy会愉快地添加它在列中找到的任何表.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。