SqlAlchemy: case语句 (case - if - then - else)
我在想,是否有办法用SqlAlchemy创建一个case
语句,比如像PostgreSQL的版本那样。
如果没有简单的方法来实现这个,直接写SQL语句是不是更好呢?
3 个回答
2
在我的情况下,Anand Tripathi 提供的解决方案并没有完全奏效,但还是有帮助的。所以,我对代码进行了更新,变成了:
from sqlalchemy import case, literal_column
case(
(
orderline.c.qty > 100,
literal_column("'greaterthan100'")
),
(
orderline.c.qty > 10,
literal_column("'greaterthan10'")
),
else_=literal_column("'lessthan10'")
)
18
来自SQLAlchemy官方文档的参考
from sqlalchemy import case, literal_column case( [ ( orderline.c.qty > 100, literal_column("'greaterthan100'") ), ( orderline.c.qty > 10, literal_column("'greaterthan10'") ) ], else_=literal_column("'lessthan10'") )
上面的内容会显示给定的常量,而不使用绑定参数来表示结果值(但仍然会对比值使用绑定参数),就像下面这样:
CASE WHEN (orderline.qty > 100) THEN 'greaterthan100' WHEN (orderline.qty > 10) THEN 'greaterthan10' ELSE 'lessthan10' END
26