大镇 阅读(73) 评论(0)
转自:
https://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中的转义函数如下:

  1. def transferContent(self, content):
  2.         if content is None:
  3.             return None
  4.         else:
  5.             string = ""
  6.             for c in content:
  7.                 if c == '"':
  8.                     string += '\\\"'
  9.                 elif c == "'":
  10.                     string += "\\\'"
  11.                 elif c == "\\":
  12.                     string += "\\\\"
  13.                 else:
  14.                     string += c
  15.             return string
要加三个\,这是因为\\会在函数中转义为\,\'会转义成',两者合起来才能在字符串中留下 \',然后sql读取后才能识别这是转义

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

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

a=" ' "
a=" \' "