Python 原始SQL到SQLAlchemy
我的原始sql语句的一部分如下所示: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
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更清晰(这是个人偏好),更易于管理。我同意,但工作任务必须完成。