Обновите столбец (ТЕКСТ) с текстом HTML (содержит 'и ") - PullRequest
1 голос
/ 27 сентября 2019

Таблица (myTAB) имеет столбец с именем HTML format в TEXT NOT NULL;

Столбец PRIMARY и другие столбцы уже есть и исправлены, только мне нужно заполнить столбец HTML, поэтому я попытался:

... 
TB_NAME = 'myTAB'
open_html = open(f.html, 'r')
content = open_html.read()
...
sql =  "UPDATE "+ TB_NAME + " SET HTML = " + content
cursor.execute(sql)

Я всегда получал:

ошибка 1064 (42000): ошибка в синтаксисе SQL ...

Я думаю, это может относиться кhtml-файл уже содержит знаки 'или ";

Также я попытался:

sql = ' UPDTAE %s SET HTML = %s '
val = (TB_NAME, content)
cursor.execute(sql,val) 

та же ошибка, также пытался использовать str (content), безуспешно.


Кстати: если таблица пуста для вставки, нет проблем! Например:

sql = 'INSERT IGNORE INTO ' + TB_NAME + '(c0,c1,c2,HTML) VALUES (%s, %s, %s, %s)'
val.append(content)
cursor.execute(sql, val)

1 Ответ

1 голос
/ 28 сентября 2019

Вы пробовали:

sql =  "UPDATE "+ TB_NAME + " SET HTML = " + content
cursor.execute(sql)`

Прежде всего, вам не хватает одинарных кавычек вокруг содержимого.Но поскольку ваш контент может содержать встроенную одинарную кавычку, это все равно не сработает.Кроме того, это выражение подвергает вас инъекции SQL.


Вы также пытались:

sql = ' UPDATE %s SET HTML = %s '
val = (TB_NAME, content)
cursor.execute(sql,val) 

Вы правильно передаете содержание html в качестве параметра.Но это не работает, поскольку имена таблиц не могут быть параметризованы.


Я бы порекомендовал связать имя таблицы и передать html-содержимое в качестве параметра:

sql = ' UPDATE ' + TB_NAME + ' SET HTML = %s '
val = [content]   # instead of (content)
cursor.execute(sql,val) 
...