我希望我能清楚我的问题。谢谢你:))
我使用的是impala连接(库:来自impala.dbapi import connect)。
为了使用execute命令运行查询:
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))引用%s i&#39; m为了使用动态变量而运行查询。
**问题是python认为它有5个参数而不是3个,这是因为我在LIKE语句中有%seo
和%social
**
有人遇到过这种问题吗?知道怎么解决吗?
非常感谢!
答案 0 :(得分:0)
您可以在查询中忽略文字百分号(例如%%seo%%
),尽管将模式作为参数传递给execute()
也会更清晰:
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%', ...))