Python 原始SQL到SQLAlchemy

Python 原始SQL到SQLAlchemy,python,mysql,sql,flask,sqlalchemy,Python,Mysql,Sql,Flask,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: que

我的原始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)
而且它的工作方式也不一样。它返回仅连接到表2的结果。在查询中不使用此联接会返回所需的行,当然,表2和表3中没有所需的字段


我的错误是什么?

您需要为
左连接使用

左连接和连接是不同的操作


对于左侧连接,请使用
外部连接
。对于JOIN(也称为内部JOIN),使用
JOIN

有点离题的问题:为什么要迁移到ORM?@khajvah,不确定,但主要是因为它的开发标准。但处理许多条件和手动连接是痛苦的,原始sql在我看来更清晰。它根本不是开发的“标准”。原始SQL更清晰(这是个人偏好),更易于管理。我同意,但工作任务必须完成。