原始SQL到SQLAlchemy

时间:2016-01-11 08:01:21

标签: 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:

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中的必需字段。

我的错误是什么?

2 个答案:

答案 0 :(得分:1)

您需要LEFT JOIN使用void updateUI(ArrayList<TeamMember> teamMembers) { adapter = new TeamMemberActivityAdapter(this, addAlphabets(sortList(teamMembers))); recList.setAdapter(adapter); recList.setVisibility(View.VISIBLE); spinningProgressView.setVisibility(View.GONE); }

答案 1 :(得分:0)

LEFT JOIN和JOIN是不同的操作。

对于LEFT JOIN,请使用outerjoin。对于JOIN(又名INNER JOIN),请使用join