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


在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=" \' "

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM