python – 我们可以使用SQLAlchemy进行相关查询

我正在尝试将此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会愉快地添加它在列中找到的任何表.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...