SQLAlchemy中的别名并集

SQLAlchemy中的别名并集,sqlalchemy,Sqlalchemy,在sqlalchemy中,我试图联合表,然后使用WHERE和ORDER\u BY 差不多 SELECT * FROM ( SELECT [TABLE_ONE].[SOME_ID] AS [SOME_ID] FROM [TABLE_ONE] UNION SELECT [TABLE_TWO].[SOME_ID] AS [SOME_ID] FROM [TABLE_TWO] ) AS anon_1 WHERE ... 炼金术: select_q = select([TABLE_

在sqlalchemy中,我试图联合表,然后使用
WHERE
ORDER\u BY

差不多

SELECT *
FROM (
  SELECT [TABLE_ONE].[SOME_ID] AS [SOME_ID]
  FROM [TABLE_ONE] 
  UNION 
  SELECT [TABLE_TWO].[SOME_ID] AS [SOME_ID]
  FROM [TABLE_TWO]
) AS anon_1
WHERE ...
炼金术:

select_q = select([TABLE_ONE.c.SOME_ID], TABLE_ONE)
select_w = select([TABLE_TWO.c.SOME_ID], TABLE_TWO)
union_qw = union(select_q,select_w) 
union_qw_aliased = aliased(union_qw)
s = select('*',union_qw_aliased)
但是SQLAlchemy生成SQL代码:

SELECT anon_1.[SOME_ID]
FROM (SELECT [TABLE_ONE].[SOME_ID] AS [SOME_ID]
FROM [TABLE_ONE] UNION SELECT [TABLE_TWO].[SOME_ID] AS [SOME_ID]
FROM [TABLE_TWO]) AS anon_1
WHERE SELECT [TABLE_ONE].[SOME_ID]
FROM [TABLE_ONE] UNION SELECT [TABLE_TWO].[SOME_ID]
FROM [TABLE_TWO]

非常感谢您的帮助

您错误地使用了第二个参数“select()”,这实际上就是“whereclause”(尽管我们现在鼓励使用
where()
方法)。FROM子句通常在您选择的列中是隐式的。对于您的“select*”,我们可以使用
select\u FROM()
设置显式的:

输出:

SELECT * 
FROM (SELECT t1.id AS id 
FROM t1 UNION SELECT t2.id AS id 
FROM t2) AS anon_1
SELECT * 
FROM (SELECT t1.id AS id 
FROM t1 UNION SELECT t2.id AS id 
FROM t2) AS anon_1 
WHERE anon_1.id = :id_1
要在何处执行更多操作,请使用
WHERE()
添加该操作,并针对union_qw_别名执行该操作:

print s.where(union_qw_aliased.c.id == 5)
输出:

SELECT * 
FROM (SELECT t1.id AS id 
FROM t1 UNION SELECT t2.id AS id 
FROM t2) AS anon_1
SELECT * 
FROM (SELECT t1.id AS id 
FROM t1 UNION SELECT t2.id AS id 
FROM t2) AS anon_1 
WHERE anon_1.id = :id_1