Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 SqlAlchemy核心联合体\u全部不添加括号_Python 2.7_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 2.7 SqlAlchemy核心联合体\u全部不添加括号

Python 2.7 SqlAlchemy核心联合体\u全部不添加括号,python-2.7,sqlalchemy,flask-sqlalchemy,Python 2.7,Sqlalchemy,Flask Sqlalchemy,我有以下示例代码: 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 whe

我有以下示例代码:

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 #
我尝试使用
子查询
,如下所示:

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'
用括号括起来的子查询获得所需的输出有什么帮助吗

注意:这不是这个的副本,因为我没有使用会话

编辑

好的,这是可行的,但我认为它不是很有效,它添加了一个额外的
select*from(我的子查询)
,但它是可行的

q1 = select('*').select_from((select(columns).where(table.c.id == #).limit(#)).alias('q1'))

所以,如果有人有任何优化的想法,或者让我知道这是否是最好的。我将不胜感激。

SQLAlchemy的作者似乎意识到了这一点,并提到了一个解决方案。一般的想法是在每次选择时执行
.alias().select()

stmt1 = select([table1.c.x]).order_by(table1.c.y).limit(1).alias().select()
stmt2 = select([table2.c.x]).order_by(table2.c.y).limit(2).alias().select()

stmt = union(stmt1, stmt2)