Python MySQLdb escape_string

时间:2013-07-03 12:02:12

标签: python mysql mysql-python

MySQLdb是python与mysql数据库通信的模块。 escape_string是MySQLdb提供的一种方法,用于转义sql中的某些字符。例如,像'Update table Set col =“My”s“'这样的sql会导致错误。所以escape_string将帮助我们在”在我的“之前添加一个'\'。 但是,在gbk等多字节编码中,使用2个以上的字节来存储中文单词,escape_string只搜索要逐个转义的字符,这会导致某些特殊字符被错误地转义。例如,中文字符'昞',其字节为'\ x95 \ x5c',如果sql为'update table set col =“昞”',那么MySQLdb.escape_string(sql)将得到结果:update table设置col =“昞\”,这是错误的,无法正确执行。 那么有没有人遇到过这样的问题。

P.S我搜索了问题,发现php中有一个方法mysqli_set_charset可以解决这种情况,所以,我想知道python中是否有这样的一个。

1 个答案:

答案 0 :(得分:0)

此问题很可能是因为您的连接的默认字符集是latin1而不是unicode。你可以尝试几种不同的东西。 From this post

conn = mysql.connect(host='127.0.0.1',
                     user='user',
                     passwd='passwd',
                     db='db',
                     charset='utf8',
                     use_unicode=True)

然后你像这样运行你的查询

cursor.execute('INSERT INTO mytable VALUES (null, %s)',                  
               ('\x95\x5c',))

通过先运行以下查询

,解决了类似的problem问题
SET NAMES 'gbk