Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SqlAlchemy: case statement (case - if - then -else)

I'm wondering if there's a way to create a case statement with SqlAlchemy, e.g. the postgresql version

Maybe literal SQL is the way to go if there is no easy way of doing it?

like image 244
EoghanM Avatar asked Mar 25 '11 09:03

EoghanM


2 Answers

Check out the documentation about the case statement here: http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.case

like image 165
Philip Southam Avatar answered Oct 02 '22 14:10

Philip Southam


Reference from the Official doc of 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'")
)

The above will render the given constants without using bound parameters for the result values (but still for the comparison values), as in:

CASE
    WHEN (orderline.qty > 100) THEN 'greaterthan100'
    WHEN (orderline.qty > 10) THEN 'greaterthan10'
    ELSE 'lessthan10'
END
like image 30
Anand Tripathi Avatar answered Oct 02 '22 14:10

Anand Tripathi