是否可以在不使用子查询的情况下在 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 可以像后一个查询一样生成联合吗?
您可以使用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')
归档时间: |
|
查看次数: |
3956 次 |
最近记录: |