美文网首页
【转】【python】sql语句插入中内容同时包含单引号和双引号

【转】【python】sql语句插入中内容同时包含单引号和双引号

作者: BlueCat2016 | 来源:发表于2017-05-04 08:57 被阅读0次

    原文地址:http://www.cnblogs.com/dplearning/p/5736093.html
    在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=" ' "

    相关文章

      网友评论

          本文标题:【转】【python】sql语句插入中内容同时包含单引号和双引号

          本文链接:https://www.haomeiwen.com/subject/murrtxtx.html