MYSQL ::带有特殊字符的Connector / Python UPDATE语句不起作用

时间:2018-07-16 09:55:55

标签: python mysql python-3.x selenium-webdriver mysql-connector

我正在尝试使用Selenium和Beautifulsoup抓取网页,然后将结果存储到MySQL。 结果包含许多特殊字符,例如; '“ = ..(因为它正在解析HTML)

我遵循了这个mysql connector/python,并且INSERT可以正常工作,但是可以使用UPDATE。
如果选择表格,我会看到类似

<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不能使用相同的字符串。 有人知道吗?

1 个答案:

答案 0 :(得分:1)

参数必须作为映射(即dict)或作为元组传递。仅传递一个参数时省略尾随逗号会导致将其视为标量,因此必须像这样传递参数:

data_col = (text,)

The docs在突出的注释中也提到了这一点。