Mysql 使用HTML文本(包含和)更新列(文本)

Mysql 使用HTML文本(包含和)更新列(文本),mysql,python-3.x,Mysql,Python 3.x,该表(myTAB)有一个名为HTML format的列,文本为NOTNULL 主列和其他列已经存在并且正确,只是我需要填充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(4200

该表(myTAB)有一个名为HTML format的列,文本为NOTNULL

主列和其他列已经存在并且正确,只是我需要填充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)
你试过:

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内容作为参数传递。但这不起作用,因为无法参数化表名


我建议将表名改为contatate,并将html内容作为参数传递:

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

你应该使用像
sqlalchemy
这样的ORM,这不容易吗?lshan:谢谢,但我更喜欢留下来。@Uwe:-)我不明白你的意思,先保存/删除,然后全部插入?@UweKeim,刚刚试过,很有效,但是…感觉很尴尬!:-)谢谢你指出我的错误。但是val=(内容)没有写,但是val=[内容]它需要:-)您能解释一下吗?再次感谢!事实上,即使
content=None
我也可以将
val=[content]
用于HTML条目的空值,因此[]优于()