Форум сайта python.su
Здравствуйте
Python 3.8.2, windows 10
Как можно обновить бд MySQL, если в переменной спецсимволы, т.е.
с такой переменной обновляется
data1=“11111”
cursor.execute(f“UPDATE `s` SET `p`={data1} WHERE `id`=6”)
а вот с такой переменной выходит ошибка
data1='<span style=“font-size: 16px;”><strong><b> и т.д.'
PS: в PHP есть функция mysql_real_escape_string(), но в python(е), не могу найти подобную
Офлайн
data1='<span style=“font-size: 16px;”><strong><b> и т.д.' cursor.execute("UPDATE `s` SET `p`=%s WHERE `id`=6", (data1,))
WarningГугл переводит это так:
Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.
Предупреждение
Никогда, никогда, НИКОГДА не используйте конкатенацию строк Python (+) или интерполяцию строковых параметров (%) для передачи переменных в строку запроса SQL. Даже под дулом пистолета.
Отредактировано Striver (Март 24, 2020 06:52:41)
Офлайн
Спасибо за ответ, правда непонятно, где у меня конкатенация строки(+нигде нет), подставил вместо {} знак %, но это не решило проблему, наверное я не всё указал, у меня библиотека import pymysql.cursors
Офлайн
но это не решило проблему, наверное я не всё указал, у меня библиотека import pymysql.cursorsНеважно, какая у тебя библиотека, все библиотеки доступа к СУБД в Питоне действуют максимально похожим образом. Ты просто вообще не понял, что я тебе написал. Нельзя подставлять данные из переменных в SQL-строку. Их нужно отдельно применять внутри команды cursor.execute вторым параметром в виде кортежа из переменных.
with connection.cursor() as cursor: # Create a new record sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
Отредактировано Striver (Март 24, 2020 10:33:53)
Офлайн
Большое спасибо за помощь, Вы мне очень помогли, правда остался маленький вопросик, почему две переменные начинаются на букву s((%s, %s))?
Офлайн
почему две переменные начинаются на букву s((%s, %s))?Как я понимаю, это про строковый тип.
Офлайн