2017-11-14 9 views
0

지금까지 나는 다음과 같은 기본적있어 :SQLAlchemy 출력에 CASE 열을 추가하는 방법은 무엇입니까?

MyTable.query 
    .join(…) 
    .filter(…) 

filter 복잡한 대소 문자를 구분하지 접두사 검사가 있습니다

or_(*[MyTable.name.ilike("{}%".format(prefix)) for prefix in prefixes]) 

는 지금은 결과에서 일치하는 접두사를 검색 에 있습니다. 의사-SQL에서 :

SELECT CASE WHEN strpos(lower(my_table.foo), 'prefix1') = 0 THEN 'prefix1' WHEN … END AS prefix WHERE prefix IS NOT NULL; 

SQLAlchemy documentation

는 기존 기반으로 새 열을 얻기 위해 그것을 사용하는 방법을 이상한 가장자리의 경우처럼 보인다, 그리고 어떤 WHERECASE를 사용하는 방법을 보여줍니다.

어디서나 논리 및 접두사 이름을 중복하지 않도록하는 것이 목표입니다.

+0

는 당신은 아마도 쿼리에 개체/열을 추가하는 방법에 의해 혼동 있습니까? –

답변

0

당신은 그 사건이 표현이라는 것을 알고 있습니다. SQL이 허용하는 곳이면 어디서든 사용할 수 있으며 제공 한 문서에 링크하면 사례 표현식을 작성하는 방법을 보여줍니다. 당신은`session.query (모델)`의`Model.query` 속기를 사용하고 있기 때문에

from sqlalchemy import case, literal 
from sqlalchemy.orm import Query 

q = Query(case([ 
    (literal(1) == literal(1), True), 
], else_ = False)) 

print(q) 

SELECT CASE WHEN (:param_1 = :param_2) THEN :param_3 ELSE :param_4 END AS anon_1