【发布时间】:2016-01-11 08:01:21
【问题描述】:
我的部分原始 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 中获取所需的字段。
我的错误是什么?
【问题讨论】:
-
有点离题的问题:你为什么要迁移到 ORM?
-
@khajvah,不确定,但主要是因为它的开发标准。但是处理许多条件和手动连接很痛苦,原始 sql 对我来说看起来更清晰。
-
这根本不是一个开发“标准”。原始 SQL 更清晰(这是个人喜好)并且更易于管理。
-
我同意,但工作任务必须完成。
标签: python mysql sql flask sqlalchemy