2012-12-05 119 views
2

我可以在substrfilter內使用CASE語句嗎?SQLAlchemy過濾器,substr,case

這裏是我的要求:

>> value = '00021050430' #here value is a database column 
>> query.filter((func.substr(value,case([(func.length(value) > 7,func.length(varying_value)-7+1))],else_=1),7)=='1050430') 

輸出我期待的是:

>> query.filter(func.substr(value,6,7)) 

以上拋出一個錯誤。

+0

請始終包含實際(完整)回溯。 –

回答

4

這裏您不需要使用CASE()聲明。只需使用Python:

query.filter(func.substr(value, 1 if len(value) > 7 else 1, 7) == '1050430') 

這被稱爲條件表達式;它的結構爲true_expr if test_expr else false_expr,其中true_exprtest_expr評估爲True時使用,否則使用false_expr零件。

如果value一個常數,而是一列引用,那麼你需要使用CASE()聲明。使用sqlalchemy.sql.expression.case()爲:

from sqlalchemy.sql.expression import case 

query.filter(func.substr(value, case([(func.length(column) > 7, func.length(column) - 7 + 1)], else_=1), 7) == '1050430') 

,但你需要確保你的()括號是平衡的(你有一個太多)。