2012-12-05 2 views
2

나는 substrfilter 내에서 CASE 문을 사용할 수 있습니까? 내가 기대하고SQLAlchemy의 필터는 SUBSTR, 경우

>> 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() 문을 사용할 필요가 없습니다. 그냥 파이썬을 사용하십시오 :

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

이것은 조건식이라고 불립니다. test_expr이 True로 평가되는 경우 true_expr이 사용되는 경우 true_expr if test_expr else false_expr으로 생성되고, 그렇지 않은 경우 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') 

하지만 당신은 당신의 () 괄호가 균형되어 있는지 확인해야합니다 (당신은 너무 많은 있었다).