SqlAlchemy: case语句 (case - if - then - else)

32 投票
3 回答
56211 浏览
提问于 2025-04-16 14:24

我在想,是否有办法用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

撰写回答