46

ORMパラグディムでSQLAlchemyを使用しています。CASEWHEN命令を実行する方法を見つけることができません。これに関する情報はウェブ上にありません。

出来ますか ?

4

3 に答える 3

75

ドキュメント ページのsqlalchemy.sql.expression.case関数とその他の例を参照してください。しかし、それは次のようになります(リンクされているドキュメントからの逐語的なもの):

case([(orderline.c.qty > 100, item.c.specialprice),
      (orderline.c.qty > 10, item.c.bulkprice)
    ], else_=item.c.regularprice)
case(value=emp.c.type, whens={
        'engineer': emp.c.salary * 1.1,
        'manager':  emp.c.salary * 3,
    })

edit-1 : (コメントに答えて)もちろんできます。以下の例を参照してください:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, autoincrement=True)
    first_name = Column(String)
    last_name = Column(String)

xpr = case([(User.first_name != None, User.first_name + " " + User.last_name),],
        else_ = User.last_name).label("full_name")

qry = session.query(User.id, xpr)
for _usr in qry:
    print _usr.fullname

ハイブリッド プロパティで使用される例については、ハイブリッドの使用も参照してください。case

于 2012-06-29T09:08:56.327 に答える