2016-05-31 9 views
-1

私は私の問題について明らかにできることを願っています。ありがとう:)変数%sを使用しないでPythonのSQLステートメント

私はimpala接続(ライブラリ:impala.dbapiインポート接続から)を使用しています。一般 cursor.execute(query.value, (year_var, month_var,day_var))

- それはまた、変数と、うまく動作します:

クエリを実行するためには、私は、実行コマンドを使用しています。問題は、SQL LIKE文を使用したときに始まります(たとえば、%seoのように%sが含まれています)。

第一引数(query.value)は文字列です:

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))の第2引数は%sに参照してください。私は上入れています動的変数を使用するためにクエリが実行されます。

**問題はPythonが私は好きでたstatmentsで%seo%socialを持っているので、それが原因だけではなく3の5つの引数を持っていると考えていることである**

誰でもこの種の問題に遭遇しましたか?それを解決する方法を知っていますか?

多くの感謝!

+1

は多分リテラル '%を' %% 'を使います'。 –

答えて

0

同様​​へのパラメータとして、パターンを渡すようにきれいになりますが、あなたは、クエリ内で(例えば%%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

こんにちは、お返事ありがとうございます:) これは、多くのテーブルで実行する必要がある汎用スクリプトであるため、私には問題があります。 %sが含まれていない別の方法でクエリを修正する必要があります。 あなたは文字通りのパーセント記号を逃れることができると言った。どうすればいいのですか?二重%%の記号を試しましたが、Pythonはまだエラーを返します。 – shayms8

関連する問題