У меня есть кортеж целого числа, я хочу запросить все строки со значением столбца, найденным в кортеже. Легко построить запрос, но я хочу, чтобы это было sql-инъекцией. Обычно я использую подготовленное заявление, но я не вижу, как справляться с обеими потребностями.MySQL и PYTHON. Как запросить WHERE 'column' IN tuple
Моей конструкция запроса выглядит следующим образом:
filterList = (1, 2, 4) #Taken as input. Should be integers
sqlRequest = 'SELECT * FROM table'
if filterList != None and len(filterList) > 0:
sqlRequest += ' WHERE column IN ('
addComa = False
for filter in filterList:
if addComa:
sqlRequest += ','
else:
addComa = True
sqlRequest += '%s'%(int(filter)) #casted to int to avoid SQL injection. Still not as good as I would like
sqlRequest += ')'
#At this point sqlRequest == 'SELECT * FROM table WHERE column IN (1,2,4)'
sqlResult = cursor.execute(sqlRequest)
Я хотел бы иметь запрос больше как:
sqlRequest = 'SELECT * FROM table WHERE column IN (%s, %s, %s)'
и выполнить его с подготовленным заявлением:
sqlResult = cursor.execute(sqlRequest, filterList[0], filterList[1], filterList[2])
Но filterList как переменная длина. Есть ли способ сделать что-то вроде?
sqlResult = cursor.execute(sqlRequest, filterList) #where filterList is the whole tuple
Точно так же, как с другими базами данных, см [Использование WHERE \ _ \ _ \ _ В \ _ \ _ \ _ оператор] (https://stackoverflow.com/q/14245396) и [Database API : Как это работает с несколькими, где условие в Python] (https://stackoverflow.com/q/19043987). –
Извините, это не значит, что вы предлагаете редактировать, просто переустановите его на исправление размножения заполнителя. –
Нет проблем. Я должен был сделать как минимум 6 изменений (включая некоторые бесполезные) для редактирования. –