python
  • mysql
  • sql-server
  • sqlalchemy
  • 2016-12-05 62 views 0 likes 
    0

    我使用sqlaclhemy查詢我的數據庫在我的Python項目,我是相當新的SQLAlchemy的,但像此刻的概念,我在做很簡單的事情一樣,原始的SQL SQLAlchemy的語法

    sel = select([staff.c.name]) \ 
        .select_from(staff) \ 
        .where(staff.c.workbase != "") \ 
        .where((staff.c.status != 'Left') & (staff.c.status != 'Name Changed')) 
    
    我的項目

    部分需要更復雜的SQL查詢,但我要保持它在SQLAlchemy中,我的原始的SQL看起來像這樣,

    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'; 
    

    我不知道該怎麼辦嵌套選擇等,在SQLAlchemy的。

    回答

    1

    你就可以生產使用.join()加入:

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

    您可以通過子查詢代替表達式中的表名:

    >>> 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 
    

    在大多數情況下,子查詢行爲酷似表。

    相關問題