Как предложил пользователь @SahapAsci в комментарии к вопросу, вы должны использовать параметры для своего SQL-запроса (см. docs ), чтобы избежать уязвимостей в SQL-инъекциях.
Документы, которые я связал, даже имеют приятное примечание:
Но я подозреваю, что код @SahapAsci, предложенный в их комментарии, содержит небольшую ошибку. Пользователь предложил этот код:
cursor.execute(
'SELECT id FROM fqdn AS domain WHERE domain.fqdn IS %s',
(fqdn_str))
Но я думаю, что вам нужно добавить запятую в кортеж параметров, потому что в противном случае это будет не кортеж, а всего лишь одна строка, которая будет интерпретироваться как итеративная и использовать только первый символ (и затем выбрасывать ошибка, которую вы упомянули: "TypeError: not all arguments converted during string formatting"
). В документах, на которые я ссылаюсь, даже есть примечание, чтобы быть осторожным в этом конкретном случае.
И вам, вероятно, следует использовать =
вместо IS
, но я не совсем уверен в этой последней части.
Итак, ваш окончательный код должен выглядеть примерно так:
cursor.execute(
'SELECT id FROM fqdn AS domain WHERE domain.fqdn = %s',
(fqdn_str, ))