2012-06-29 7 views
15

Ich benutze SQLAlchemy mit dem ORM paragdim. Es gelingt mir nicht, eine CASE WHEN-Anweisung zu finden. Ich finde keine Informationen dazu im Internet.FALL WENN mit ORM (SQLalchemy)

Ist es möglich?

+0

Diese Frage ist ein Duplikat: http://stackoverflow.com/questions/5430640/sqlalchemy-case-statement-case-if-then-else – Nrai

Antwort

28

Siehe sqlalchemy.sql.expression.case Funktion und weitere Beispiele auf der Dokumentationsseite. Aber es würde wie folgt aussehen (wörtlich aus der Dokumentation verknüpft):

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: (Beantwortung der Kommentar) Sicher, dass Sie können, siehe Beispiel unten:

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 

Siehe auch Using a hybrid für ein Beispiel von case, das in den Hybrideigenschaften verwendet wird.

+0

also keine Möglichkeit mit dem ORM? – Oodini

+0

Sie können sehen, aktualisierte Antwort mit Beispiel, die gut funktioniert. – van

+0

Danke! Und Glückwunsch an das Dokument für die Funktion [query()] (http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.query) ... – Oodini