Я пишу обобщенную c функцию для запроса базы данных, где я хочу использовать * args для получения значений. Вот функция
def get_latest_value(col_name, *args):
query = "select * from latest_value where {column} in (%s)"
query = query.format(**dict(column=col_name))
results = pd.read_sql_query(query, engine, params = [args])
return(results)
Однако, когда я запускаю это, я получаю эту ошибку:
ProgrammingError: (MySQLdb._exceptions.ProgrammingError) not all arguments converted during bytes formatting
[SQL: select * from latest_value where amfi_code in (%s)]
[parameters: (100370, 100371)]
(Background on this error at: http://sqlalche.me/e/f405)
Я даже пытался преобразовать * args в список перед его передачей, но это не тоже не поможет.
Невозможно понять, как передать значения в * args предложению IN. Любая помощь приветствуется.
Кроме того, использует ли конкатенация строк для имени столбца таким образом, безопасный от sql атак внедрения?
Обновление:
Я изменил код следующим образом:
def get_latest_value(col_name, *args):
query = "select * from latest_value where {column} in (%s)"
query = query.format(**dict(column=col_name))
conditions = ", ".join(map(str, args))
results = pd.read_sql_query(query, engine, params = [conditions])
return(results)
Я не получаю ошибку сейчас, но я получаю результаты только для первого значения в аргументах.