2012-06-29 20 views
15

ORTA paragdim ile SQLAlchemy kullanıyorum. CASE WHEN talimatı yapmanın bir yolunu bulmuyorum. Bu konuda internette bilgi bulamıyorum.DURUM ORM (SQLalchemy) ile

Mümkün mü?

+0

Bu soru yinelediği: Yani http://stackoverflow.com/questions/5430640/sqlalchemy-case-statement-case-if-then-else – Nrai

cevap

28

Belge sayfasındaki sqlalchemy.sql.expression.case işlevine ve diğer örneklere bakın. Ama (bağlı belgelerinden kelimesi kelimesine) şu şekilde görünecektir:

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: (yorumunu yanıtlayan) Eğer aşağıda örnek görebilirsiniz Emin:

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 

Ayrıca, melez özelliklerinde kullanılan case örneği için Using a hybrid'a bakın.

+0

, ORM ile hiçbir olasılıkları? – Oodini

+0

Sadece iyi çalışan örnekle güncellenmiş cevabı görebilirsiniz. – van

+0

Teşekkürler! Ve [query()] (http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.query) işlevi için doktora tebrikler ... – Oodini