Параметризация запроса в PyMySQL для запроса с ключевым словом «IN» - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть таблица, которая выглядит как

mysql> select * from statements;
+----+----------------+--------+---------+
| id | account_number | amount | type    |
+----+----------------+--------+---------+
|  1 |              1 |   1000 | Deposit |
|  2 |              1 |    500 | Fees    |
+----+----------------+--------+---------+
2 rows in set (0.00 sec)

У меня есть соединитель PyMySQL, через который я хочу выполнить запрос select * from statements where type in ('Deposit', 'Fees')

Мой вопрос отличается от возможных дубликатов, так какв частности, запрашивает запросы типа «IN», где размеры списков могут быть динамическими и их немного сложнее написать, чем обычный тип запросов %s с жестким кодом select * from statements where type in (%s, %s).

Мне интересно, как точно написатьзапрос таким образом, что он параметризован и относительно защищен от внедрения SQL.Мой текущий фрагмент кода выглядит следующим образом:

import pymysql

connection = pymysql.connect('''SQL DB credentials''')
cur = connection.cursor()
l = ['Deposit', 'Fees']
st = f'select * from statements where type in (' + ','.join(['%s'] * len(l)) + ')'
cur.execute(st, l)
cur.fetchall()

Результат:

((1, 1, 1000, 'Deposit'), (2, 1, 500, 'Fees'))

Мой вопрос таков: насколько хорошо этот параметр SQL параметризован и безопасен от базового внедрения SQL?

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