dplearning

在python中调用MySQLdb模块插入数据信息,假设待输入信息data为:

Hello\'World"!

其中同时包含了单引号和双引号

一般插入语句为

sql = "insert into tb (my_str) values(\'%s\')" % (data)
cursor.execute(sql)

其中values(\'%s\')中的%s外面也要有引号,这个引号与data中的引号匹配导致了内容错误

 

解决办法一: MySQLdb.escape_string()

在MySQLdb模块中自带针对mysql的转义函数escape_string(),直接调用即可

sql = "insert into tb (my_str) values(\'%s\')" % (MySQLdb.escape_string(data))
cursor.execute(sql)

 

解决办法二:转义字符

将data变为下面的形式,再插入数据库就正确了

Hello\\'World\"!

具体在python中的转义函数如下:

def transferContent(self, content):
        if content is None:
            return None
        else:
            string = ""
            for c in content:
                if c == \'"\':
                    string += \'\\\"\'
                elif c == "\'":
                    string += "\\\\'"
                elif c == "\\":
                    string += "\\\\"
                else:
                    string += c
            return string

要加三个\,这是因为\\会在函数中转义为\,\\'会转义成\',两者合起来才能在字符串中留下 \\',然后sql读取后才能识别这是转义

注意,\本身也需要转义,否则如果原本字符串中为\\',只转义\'就会变成\\\\\',结果是\\\\相互抵消,只剩下\'

 

在python中,下面两种写法是一样的

a=" \' "
a=" \\' "

 

分类:

技术点:

相关文章: