2016-11-13 3 views
0

У меня есть функция запроса, где я хочу, чтобы поместить значение динамически.Python MYSQL SELECT, с динамическим значением

query_values = { 
    "column_value": question["value"], 
    "value_2": question["value_2"], 
    "startdate": date_range["start"], 
    "enddate": date_range["end"] 
} 

query = (
     "SELECT %(column_value)s FROM ga_ad_matched_query " 
     "WHERE (ga_ad_matched_query LIKE %(value_2)s) AND " 
     "(stat_date BETWEEN %(enddate)s AND %(startdate)s)" 
    ) 
cur.execute(query, query_values) 

Все работает хорошо, но если я использую переменную% (column_values) я получаю содержание вопроса ["value"] в результат, а не фактические значения столбца. Если я не использую переменную% (column_values), но использую регулярное имя столбца insted, все работает отлично. .... но он нуждается в этой функции динамически, поэтому мне нужно разместить там% (column_values).

Есть ли ошибка синтаксиса, которую я наблюдаю здесь? Спасибо за помощь.

+0

Это не представляется возможным использовать имена столбцов в качестве параметров запроса. Вам придется либо попытаться избежать имени столбца самостоятельно, либо вставить его в необработанный запрос (потенциально опасный) или получить все столбцы, а затем использовать только некоторые из них (я бы сделал это именно так). – lovasoa

+0

@lovasoa Спасибо за ваше решение. Работает! –

ответ

-1

попробуйте использовать более простой запрос как синтаксис строки:

query = "SELECT %s FROM ga_ad_matched_query WHERE (ga_ad_matched_query LIKE %s) AND (stat_date BETWEEN %s AND %s)" % (colum_value, value2, enddate, startdate) 
cur.execute(query) 
+1

ВЫСОКО ОТКРЫТЬ, чтобы использовать строковые шаблоны для создания запросов к базе данных. – lovasoa

+0

@lovasoa у вас есть лучшее решение проблемы? –

+0

Да, я добавил комментарий к вашему вопросу. – lovasoa

Смежные вопросы