【轉】【python】sql語句插入中內容同時包含單引號和雙引號的解決辦法

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容