2016-12-05 7 views
0
私はPythonのプロジェクトで私のデータベースを照会するsqlaclhemyを使用しています

をSQLAlchemyのために、私はSQLAlchemyのためにかなり新しいですが、現時点ではコンセプトのように、私は次のように非常にシンプルなものをやっている生のSQL構文

sel = select([staff.c.name]) \ 
    .select_from(staff) \ 
    .where(staff.c.workbase != "") \ 
    .where((staff.c.status != 'Left') & (staff.c.status != 'Name Changed')) 
SQLAlchemyの中にネストされた選択になどを行うことがどのように私はわからない

SELECT A.a_allowance, B.b_allowance, C.c_allowance, A.name, A.leave_allowance 
FROM 
    (SELECT ROUND(leave_allowance * 0.32, 2) as a_allowance, name, leave_allowance FROM staff_list) A 
    INNER JOIN 
    (SELECT ROUND(leave_allowance * 0.40, 2) as b_allowance, name FROM staff_list) B 
    ON A.name = B.name 
    INNER JOIN 
    (SELECT ROUND(leave_allowance * 0.28, 2) as c_allowance, name FROM staff_list) C 
    ON A.name = C.name 
    WHERE A.name = 'Jones Jones'; 

、私の生のSQLは次のようになり、私のプロジェクトの

一部は、より複雑なSQLクエリを必要としますが、私はSQLAlchemyの中でそれを維持したいです。

>>> print(foo.join(bar, foo.c.bar_id == bar.c.id)) 
foo JOIN bar ON foo.bar_id = bar.id 

あなたがサブクエリによって表現でテーブル名を置き換えることができます:あなたは.join()を使用して参加生成することができます

答えて

1

>>> left = select([foo.c.bar_id]).select_from(foo).where(foo.c.baz > 0).alias("left") 
>>> print(left.join(bar, left.c.bar_id == bar.c.id)) 
(SELECT foo.bar_id AS bar_id 
FROM foo 
WHERE foo.baz > :baz_1) AS "left" JOIN bar ON "left".bar_id = bar.id 

ほとんどの部分については、サブクエリは正確にテーブルのように振る舞います。