MYSQL:: Connector/Python 带有特殊字符的 UPDATE 语句不起作用
MYSQL:: Connector/Python UPDATE statement with special chars doesn't work
我正在尝试使用 Selenium 和 Beautifulsoup 抓取网页,然后将结果存储到 MySQL。
结果包含许多特殊字符,例如; ' " =..(因为它正在解析 HTML)
我遵循了这个 mysql connector/python 并且 INSERT 工作正常,但是 UPDATE。
如果我 select 我的 table 我可以看到这样的东西
<div style="width:80px; float: ~~~ ... </div>
表示目标HTML元素存储成功。
这是我的 INSERT 和 UPDTE。
# after import and configs
soup = BeautifulSoup(innerHTML, "html.parser")
text = soup.prettify()
print(text)
# this INSERT works fine
# insert = ("INSERT INTO g_cache (a_col, cache_contents) VALUES(%s, %s)")
# data_row = ('aaa', text)
# cursor.execute(insert, data_row)
# Trying to UPDATE already inserted row. Not working
# I executed and commented above INSERT before run the following UPDATE
update = ("""UPDATE g_cache SET cache_contents =%s WHERE id=21""")
data_col = (text)
cursor.execute(update, data_col)
# If I use one complete string, it works though. For example
# cursor.execute("""UPDATE g_cache SET cache_contents ='111' WHERE id=21""")
cnx.commit()
错误信息是
mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1
行的“%s WHERE id=21”附近使用的正确语法
我刚刚关注了 MYSQL:: Connector/Python API.
我不明白为什么使用相同的字符串 INSERT 有效但 UPDATE 无效。
有人有什么想法吗??
参数必须作为映射(即字典)或元组传递。仅传递一个参数时省略尾随逗号会导致它被视为标量,因此必须像这样传递参数:
data_col = (text,)
The docs 也在显眼的注释中提到这一点。
我正在尝试使用 Selenium 和 Beautifulsoup 抓取网页,然后将结果存储到 MySQL。 结果包含许多特殊字符,例如; ' " =..(因为它正在解析 HTML)
我遵循了这个 mysql connector/python 并且 INSERT 工作正常,但是 UPDATE。
如果我 select 我的 table 我可以看到这样的东西
<div style="width:80px; float: ~~~ ... </div>
表示目标HTML元素存储成功。 这是我的 INSERT 和 UPDTE。
# after import and configs
soup = BeautifulSoup(innerHTML, "html.parser")
text = soup.prettify()
print(text)
# this INSERT works fine
# insert = ("INSERT INTO g_cache (a_col, cache_contents) VALUES(%s, %s)")
# data_row = ('aaa', text)
# cursor.execute(insert, data_row)
# Trying to UPDATE already inserted row. Not working
# I executed and commented above INSERT before run the following UPDATE
update = ("""UPDATE g_cache SET cache_contents =%s WHERE id=21""")
data_col = (text)
cursor.execute(update, data_col)
# If I use one complete string, it works though. For example
# cursor.execute("""UPDATE g_cache SET cache_contents ='111' WHERE id=21""")
cnx.commit()
错误信息是
mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1
我刚刚关注了 MYSQL:: Connector/Python API.
我不明白为什么使用相同的字符串 INSERT 有效但 UPDATE 无效。
有人有什么想法吗??
参数必须作为映射(即字典)或元组传递。仅传递一个参数时省略尾随逗号会导致它被视为标量,因此必须像这样传递参数:
data_col = (text,)
The docs 也在显眼的注释中提到这一点。