【发布时间】:2015-06-04 21:37:51
【问题描述】:
我有以下示例代码:
queries = []
q1 = select([columns]).where(table.c.id == #).limit(#)
queries.append(q1)
q2 = select([columns]).where(table.c.id == #).limit(#)
queries.append(q2)
final_query = union_all(*queries)
生成的SQL应该是这样的:
(select columns from table where id = # limit #)
UNION ALL
(select columns from table where id = # limit #)
但是,我得到了
select columns from table where id = # limit #
UNION ALL
select columns from table where id = # limit #
我尝试使用subquery,查询如下:
q1 = subquery(select([columns]).where(table.c.id == #).limit(#))
生成的查询如下所示:
SELECT UNION ALL SELECT UNION ALL
我也试过了
q1 = select([columns]).where(table.c.id == #).limit(#)).subquery()
但是,我得到了错误:
'Select' object has no attribute 'subquery'
对用括号括起来的子查询获得所需的输出有何帮助?
注意:这不是 question 的副本,因为我没有使用 Session。
编辑
好的,这个工作,但我不相信它很有效,而且它增加了一个额外的select * from (my sub query),但它工作。
q1 = select('*').select_from((select(columns).where(table.c.id == #).limit(#)).alias('q1'))
所以,如果有人有任何优化的想法,或者让我知道这是否尽可能好。我会很感激的。
【问题讨论】:
标签: python-2.7 sqlalchemy flask-sqlalchemy