gpt4 book ai didi

Python MySQL转义特殊字符

转载 作者:太空狗 更新时间:2023-10-29 21:29:24 26 4
gpt4 key购买 nike

我正在使用 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

如何原始插入此文本?

最佳答案

这是您应该使用 parameter binding 的原因之一而不是在 Python 中格式化参数。

只需这样做:

sql = 'UPGRADE inventory_server set server_mac = %s where server_name = %s'

然后:

cur.execute(sql, macs, host)

这样,您就可以将字符串作为字符串处理,让 MySQL 库为您计算如何引用和转义它。

最重要的是,您通常可以获得更好的性能(因为 MySQL 可以编译和缓存一个查询并将其重复用于不同的参数值)并避免 SQL injection attacks (让自己被黑的最常见方法之一)。

关于Python MySQL转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com