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_="結婚不可") )
例としてはわかりやすいけど、妙な法律だねえ。