python 如何按大小写、降序排序?

db2dz4w8  于 2023-03-06  发布在  Python
关注(0)|答案(2)|浏览(141)

我想使用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语句呢?

3wabscal

3wabscal1#

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

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

tf7tbtn22#

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

相关问题