Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按大小写排序,降序?_Python_Flask_Sqlalchemy - Fatal编程技术网

Python 如何按大小写排序,降序?

Python 如何按大小写排序,降序?,python,flask,sqlalchemy,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)

我想使用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)
        ]
    )
)

但它引发了一个
编程错误“您的SQL语法有错误”
。如何在SQLAlchemy中编写这个case语句?

case
函数不是
db.func.case
,它是
SQLAlchemy.sql.expression.case

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

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