2012-06-29 38 views
15

我正在使用SQLAlchemy與ORM paragdim。我無法找到一種方法來做CASE WHEN指令。我在網上找不到關於此的信息。CASE何時與ORM(SQLalchemy)

可能嗎?

+0

這是問題的一個副本: http://stackoverflow.com/questions/5430640/sqlalchemy-case-statement-case-if-then-else – Nrai

回答

28

請參閱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, 
    }) 

編輯-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的示例,另請參閱Using a hybrid

+0

所以,用ORM沒有方法可行? – Oodini

+0

你可以看到更新的答案,其中的例子很好用。 – van

+0

謝謝!並祝賀[query()](http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.query)函數的文檔... – Oodini