2016-04-26 7 views
2

Another question shows how to do a union in SQLAlchemy.Можете ли вы выполнить UNION без подзапроса в 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 создать объединение, подобное последнему запросу?

+0

'session.execute (s1.union (s2))'? – univerio

+0

@univerio No. Если вы напечатаете s1.union (s2), вы увидите, что он использует подзапрос. – Buttons840

ответ

0

согласно SQLAlchemy SQL Expression Language Tutorial:

Вы можете использовать sqlalchemy.sql.expression.union:

>>> from sqlalchemy.sql import union 
>>> u = union(
...  addresses.select(). 
...    where(addresses.c.email_address == '[email protected]'), 
... addresses.select(). 
...    where(addresses.c.email_address.like('%@yahoo.com')), 
...).order_by(addresses.c.email_address) 

>>> u.compile() 
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 
('[email protected]', '%@yahoo.com') 
Смежные вопросы