在python中調用MySQLdb模塊插入數據信息,假設待輸入信息data為:
data_a = 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_a))
cursor.execute(sql)
解決辦法二:轉義字符
將data變為下面的形式,再插入數據庫就正確了
data_a = Hello\'World\"!
具體在python中的轉義函數如下:
data_a = data_a.replace("'", "\\\'") 將單引號轉成\單引號
data_a = data_a.replace('"', '\\\"') 將雙引號轉成\雙引號
要加三個\,這是因為\\會在函數中轉義為\,\'會轉義成',兩者合起來才能在字符串中留下 \',然后sql讀取后才能識別這是轉義;
注意,\本身也需要轉義,否則如果原本字符串中為\',只轉義'就會變成\\\\',結果是\\\\相互抵消,只剩下'