2016-05-31 2 views
-1

제 문제에 대해 분명히 알기를 바랍니다. 고마워요 :)% s를 사용하지 않고 변수가있는 python SQL 문

임팔라 연결 (라이브러리 : impala.dbapi 가져 오기 연결에서)을 사용하고 있습니다. 일반적으로 cursor.execute(query.value, (year_var, month_var,day_var))

- 또한 변수, 잘 작동 :

쿼리를 실행하기 위해 나는 실행 명령을 사용하고 있습니다. 문제는 SQL LIKE 구문을 사용할 때 시작됩니다 (예 : '% seo'- % s이 (가) 포함).

create table bi_db.search_terms as 
select search_query,search_contain,count(*) searches 
from (
select search_query, 
case when lower(search_query) like '%logo%' then 'logo' 
    when lower(search_query) like '%google%' then 'google' 
    when lower(search_query) like '%facebook%' then 'facebook' 
    when lower(search_query) like '%instagram%' then 'instagram' 
    when lower(search_query) like '%etsy%' then 'etsy' 
    when lower(search_query) like '%seo%' then 'seo' 
    when lower(search_query) like '%social media%' then 'social media' 
    else 'else' end as search_contain 
from traffic_db.traffic_parq a 
where year = %s AND month = %s AND day = %s AND controller = 'search' and action in ('gigs','users')   
and search_query is not null and search_query<>'') t 
group by search_query,search_contain 

cursor.execute의 두 번째 인수 (예 : (year_var, month_var는 day_var가)) 난에두고있어 % s을 참조하십시오

1 차 인수 (query.value) 캐릭터 라인이다 동적 변수를 사용하기 위해 쿼리가 실행됩니다.

** 문제는 파이썬이가 생각하는 것입니다 (5 개) 인수 대신에만 3 전

누구나 이런 종류의 문제를 발생한 LIKE 문에서도 **에서 %seo%social을 가지고 있기 때문에 원인이의? 그것을 해결하는 방법을 알아?

감사합니다.

+1

는 문자 그대로'%를'%%'사용 '. –

답변

0

그것뿐만 아니라 execute()에 매개 변수로 패턴을 전달하는 청소기 것입니다하지만 당신은 쿼리에 리터럴 퍼센트 기호 (예 : %%seo%%)를 벗어날 수 :

어쩌면
sql = """ 
create table bi_db.search_terms as 
select search_query,search_contain,count(*) searches 
from (
select search_query, 
case when lower(search_query) like %s then 'logo' 
... 
""" 
cursor.execute(sql, ('%logo%', ...)) 
+0

안녕하세요, 답변 주셔서 감사합니다 :) 많은 테이블에서 실행해야하는 일반 스크립트이기 때문에 실행중인 paramerts를 변경하려면 문제가 있습니다. % s을 포함하지 않는 다른 방법으로 쿼리를 수정해야합니다. 문자 그대로 백분율 기호를 벗어날 수 있다고하셨습니다. 어떻게해야합니까? 이중 %% 기호를 시도했지만 파이썬 여전히 오류를 반환합니다. – shayms8

관련 문제