SQLAlchemyで"case"

SQLAlchemyでcase文がつかえる。

case文とかこれのこと。 CASE WHEN 条件 THEN 値1 ELSE 値2 END

第一引数は必須で、条件と、それが真だった場合に返す値のタプルのリスト。

キーワード引数 else_ は偽だった場合に返す値。

条件にはand、or演算が使えることは確認した。

IN も使えるかと思ったけどどうも想定どおりの挙動ではない。後で調査。

from sqlalchemy.sql.expression import case, and_, or_

年齢から成人・未成年を出力する例。

session.query(
    Person.id,
    Person.name,
    case([(Person.age >= 20, "成人")], else_="未成年")
)

年齢・性別から結婚可能かどうか出力する例。

session.query(
    Person.id,
    Person.name,
    case([or_(and_(Person.age >= 16, Person.sex == "female"), and_(Person.age >= 18, Person.sex == "male")), "結婚可"], else_="結婚不可")
)

例としてはわかりやすいけど、妙な法律だねえ。