如何按大小写顺序排序?

Hay*_*Pan 3 python sqlalchemy flask

我想使用SQLAlchemy构建此查询:

select * from t order by
case
    when t.x!=0 then t.y
    when t.x==0 then 0
end desc;
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

db.session.query(t).order_by(
    db.func.desc(
        db.func.case([
            (t.x!=0, t.y),
            (t.x==0, 0)
        ]
    )
)
Run Code Online (Sandbox Code Playgroud)

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

dav*_*ism 5

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

db.session.query(t).order_by(db.case(((t.x != 0, t.y),), else_=0).desc())
Run Code Online (Sandbox Code Playgroud)