可以在 SQLAlchemy 中执行没有子查询的 UNION 吗?

But*_*840 4 sqlalchemy

另一个问题展示了如何在 SQLAlchemy 中进行联合。

是否可以在不使用子查询的情况下在 SQLAlchemy 中执行联合?

例如,在链接的问题中,SQLAlchemy 生成以下形式的 SQL:

SELECT * FROM (SELECT column_a FROM table_a UNION SELECT column_b FROM table_b)

但我希望 SQLAlchemy 生成如下 SQL:

SELECT column_a FROM table_a UNION SELECT column_b FROM table_b

后一个 SQL 更短,不使用子查询,并且执行相同的操作。SQLAlchemy 可以像后一个查询一样生成联合吗?

cow*_*ert 5

根据SQLAlchemy SQL 表达式语言教程

您可以使用sqlalchemy.sql.expression.union

from sqlalchemy.sql import union
u = union(
    addresses.select().where(addresses.c.email_address == 'foo@bar.com'),
    addresses.select().where(addresses.c.email_address.like('%@yahoo.com')),
).order_by(addresses.c.email_address)
u.compile()
Run Code Online (Sandbox Code Playgroud)

这会产生:

SELECT
    addresses.id,
    addresses.user_id,
    addresses.email_address
FROM addresses WHERE addresses.email_address = ?

UNION

SELECT
    addresses.id,
    addresses.user_id,
    addresses.email_address
FROM addresses
WHERE addresses.email_address LIKE ?
ORDER BY addresses.email_address
Run Code Online (Sandbox Code Playgroud)

参数:('foo@bar.com', '%@yahoo.com')