2012-06-29 11 views
15

Sto usando SQLAlchemy con il paragdim ORM. Non riesco a trovare un modo per fare un'istruzione CASE WHEN. Non trovo informazioni su questo sul web.CASE WHEN con ORM (SQLalchemy)

È possibile?

+0

Questa è domanda è un duplicato di: http://stackoverflow.com/questions/5430640/sqlalchemy-case-statement-case-if-then-else – Nrai

risposta

28

Vedere la funzione sqlalchemy.sql.expression.case e altri esempi nella pagina di documentazione. Ma sarebbe simile a questa (dalla documentazione legata a):

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: (rispondendo al commento) Certo si può, vedi esempio qui sotto:

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 

Vedere anche Using a hybrid per un esempio di case utilizzato nelle proprietà ibride.

+0

Quindi, nessun possiblity con l'ORM? – Oodini

+0

È possibile, vedere la risposta aggiornata con un esempio che funziona bene. – van

+0

Grazie! E congratulazioni al doc per la funzione [query()] (http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.query) ... – Oodini

Problemi correlati