簡體   English   中英

從原始SQL到SQLAlchemy

[英]Raw SQL to SQLAlchemy

我的原始sql語句的一部分看起來像這樣:

select /*some selects*/
if(/*condition*/, table1.price , if(/*condition*/, t2.price, t3.price)) as price
/*some joins*/
left join table2 t2 on table1.type=t2.id
left join table3 t3 on table1.type=t3.id

該語句按預期工作。

SQLAlchemy ORM:

query = db_session.query(Table1,\
                         func.IF(Table1.field5 == 5, Table1.price,\
                         func.IF(Table1.new_model == 1, Table2.price, Table3.price)) 
#+some selects
#+some joins
query = query.join(Table2, Table1.type == Table2.id)\
             .join(table3, Table1.type == Table3.id)

而且它的工作方式不同。 它返回僅連接到Table2的結果。 而且,在查詢中不使用此聯接將返回所需的行,但是當然沒有此Table2和Table3的必需字段。

我怎么了

您需要對LEFT JOIN連接使用outerjoin

LEFT JOIN和JOIN是不同的操作。

對於LEFT JOIN,請使用outerjoin 對於JOIN(又名INNER JOIN),請使用join

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM