我使用python在MySQL中插入一个带有特殊字符的字符串。
要插入的字符串如下所示:
macaddress_eth0;00:1E:68:C6:09:A0;macaddress_eth1;00:1E:68:C6:09:A1
下面是SQL:
UPGRADE inventory_server
set server_mac = macaddress\_eth0\;00\:1E\:68\:C6\:09\:A0\;macaddress\_eth1\;00\:1E\:68\:C6\:09\:A1'
where server_name = 'myhost.fqdn.com
当我执行更新时,会出现以下错误:
ERROR 1064 (42000):
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'UPGRADE inventory_server
set server_mac = 'macaddress\_eth0\;00\:1E\:68\:C6\:09\' at line 1
python代码:
sql = 'UPGRADE inventory_server set server_mac = \'%s\' where server_name = \'%s\'' % (str(mydb.escape_string(macs)),host)
print sql
try:
con = mydb.connect(DBHOST,DBUSER,DBPASS,DB);
with con:
cur = con.cursor(mydb.cursors.DictCursor)
cur.execute(sql)
con.commit()
except:
return False
如何原始插入此文本?
Python示例如何插入原始文本:
在MySQL中创建一个表:
Python代码:
运行它,检查输出:
这些字符在插入时都没有被解释。
虽然我也认为应该使用参数绑定,但也有以下几点:
这是使用parameter binding而不是在Python中格式化参数的原因之一。
就这样做:
然后:
这样,您就可以将字符串作为字符串处理,并让MySQL库计算出如何引用和转义它。
除此之外,您通常可以获得更好的性能(因为MySQL可以编译和缓存一个查询,并将其用于不同的参数值),并避免SQL injection attacks(最常见的黑客攻击方法之一)。
相关问题 更多 >
编程相关推荐