我想使用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语句?
答案 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
。