如何按案件排序,下降?

时间:2015-03-05 07:12:35

标签: python flask sqlalchemy

我想使用SQLAlchemy构建此查询:

select * from t order by
case
    when t.x!=0 then t.y
    when t.x==0 then 0
end desc;

我尝试了以下内容:

db.session.query(t).order_by(
    db.func.desc(
        db.func.case([
            (t.x!=0, t.y),
            (t.x==0, 0)
        ]
    )
)

但它提出了ProgrammingError 'You have an error in your SQL syntax'。如何在SQLAlchemy中编写这个case语句?

2 个答案:

答案 0 :(得分:4)

case不是函数,并且存在于db实例上。您可以指定else子句而不是第二个when。您只需在表达式上调用.desc(),而不是用desc()包装它。查询应如下所示:

db.session.query(t).order_by(db.case(((t.x != 0, t.y),), else_=0).desc())

答案 1 :(得分:0)

case功能不是db.func.case,而是sqlalchemy.sql.expression.case