Как использовать значения в кортеже в несколько раз при выполнении выполнить в sqlite3 - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь использовать функцию 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 Ответ

0 голосов
/ 05 ноября 2018

sqlite3 помещает их санитарно-гигиенические материалы в документы. Используйте именованный стиль заполнителя.

https://docs.python.org/3/library/sqlite3.html#sqlite3.Cursor.execute

# 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})

Этот ответ на предыдущий пост также может помочь вам визуализировать исправление: https://stackoverflow.com/a/12184247/10553976

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...