2

WHEREsqlalchemyで、テーブルを結合してから、とでエイリアスを作成しようとしていますORDER_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 ...

SQLAlchemy:

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]

どんな助けでも大歓迎です

4

1 に答える 1

2

「select()」の 2 番目の引数を誤って使用していますが、これは実際には「whereclause」です (ただし、最近ではこのwhere()メソッドの使用をお勧めしています)。FROM 句は通常、選択している列から暗黙的です。「select *」の場合、次を使用して明示的な FROM を設定できますselect_from()

from sqlalchemy import *

m = MetaData()
t1 = Table('t1', m, Column('id', Integer))
t2 = Table('t2', m, Column('id', Integer))

select_q = select([t1])
select_w = select([t2])
union_qw = union(select_q, select_w)
union_qw_aliased = union_qw.alias()
s = select('*').select_from(union_qw_aliased)

print s

出力:

SELECT * 
FROM (SELECT t1.id AS id 
FROM t1 UNION SELECT t2.id AS id 
FROM t2) AS anon_1

さらに WHERE を実行するには、それを使用して追加し、where()union_qw_aliased に対して実行します。

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 
WHERE anon_1.id = :id_1
于 2013-03-12T02:06:55.393 に答える