gpt4 book ai didi

mysql - Python在mysql上的INSERT INTO中转义特殊字符

转载 作者:行者123 更新时间:2023-11-28 23:56:57 28 4
gpt4 key购买 nike

我想从一个 mysql 数据库读取一些记录并写入另一个数据库。我这样做:

cnx_1 = mysql.connector.connect(config_1)
cnx_2 = mysql.connector.connect(config_2)
cursor_1 = cnx_1.cursor()
cursor_2 = cnx_2.cursor()
query = "select * from...."
cursor_1.execute(query)
for res in cursor_1:
id,msg=res
insert_query="insert into tbl1 (id,msg) values (%d,'%s')"%(id,msg)
cursor_2.execute(insert_query)

这段代码在大多数情况下都能正常工作,

问题:但如果“消息”字段包含特殊字符,我就有问题了。

首先我用等价的字符替换了一些特殊的字符:

msg=msg.replace('\'',"\\'")
msg=msg.replace('\r',"\\r")
msg=msg.replace('\n',"\\n")

然后我从 here 找到了更好的解决方案:

msg=str(MySQLdb.escape_string(msg))

但两者都没有完全成功,因为 msg 可以是任何东西。例如,对于第二个解决方案,我得到了这个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 683: ordinal not in range(128)

最佳答案

几周后我回来解决这个问题,我找到了它。实际上“MySQLdb.escape_string”运行良好,“UnicodeEncodeError”问题是由于连接 unicode 和 str。

基于 this ,我将“默认编码”从“ascii”更改为“utf8”:

sys.setdefaultencoding('utf8')
...
id,msg=res # Type of msg is unicode
insert_query=U'insert into tbl1 (id,msg) values (%d,\'%s\')'%(id,msg)
cursor_2.execute(insert_query)

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

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