2012-06-29 10 views
15

Estoy usando SQLAlchemy con el paragdim de ORM. No logro encontrar una manera de hacer una instrucción CASO CUANDO. No encuentro información sobre esto en la web.CASO CUANDO con ORM (SQLalchemy)

¿Es posible?

+0

Esto es cuestión es un duplicado de: http://stackoverflow.com/questions/5430640/sqlalchemy-case-statement-case-if-then-else – Nrai

Respuesta

28

Consulte la función sqlalchemy.sql.expression.case y más ejemplos en la página de documentación. Pero sería el siguiente (citamos la documentación vinculada 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: (contestar el comentario) Claro que puedes, véase el siguiente ejemplo:

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 

También vea Using a hybrid para un ejemplo de case usado en las propiedades híbridas.

+0

Por lo tanto, no hay posibilidad con el ORM? – Oodini

+0

Puede, vea la respuesta actualizada con un ejemplo que funciona bien. – van

+0

¡Gracias! Y felicitaciones al documento por la función [query()] (http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.query) ... – Oodini