Как использовать значения в кортеже в несколько раз при выполнении выполнить в sqlite3
Я пытаюсь использовать функцию execute sqlite3 для очистки полученной строки. Тем не менее, я не могу сделать это в моем случае, потому что я не могу понять, как использовать значения в кортеже более одного раза.
Что я могу сделать, это,
cursor.execute("""
select *
from rides r
where r.cno = c.cno
and (r.src like '%{0}%'
or r.dst like '%{0}%'
or e.lcode like '%{0}%'
and (r.src like '%{1}%'
or l3.address like '%{1}%')
and (r.src like '%{2}%'
or l1.address like '%{2}%')
;
""".format(keywords[0], keywords[1], keywords[2]))
Тем не менее, я узнал, что он открыт для атак sqlinjection, так как здесь непосредственно используются входные данные. Есть ли способ, которым я все еще мог бы использовать кортежи в конце функции execute несколько раз?
1 ответ
Решение
sqlite3 помещает их санитарию в центр документации. Используйте именованный стиль заполнителя.
https://docs.python.org/3/library/sqlite3.html
# This is the qmark style:
cur.execute("insert into people values (?, ?)", (who, age))
# And this is the named style:
cur.execute("select * from people where name_last=:who and age=:age", {"who": who, "age": age})
Этот ответ на предыдущее сообщение также может помочь вам визуализировать исправление: /questions/1187051/python-sqlite3-zapolnitel/1187062#1187062