原文地址: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=" ' "