標籤:blank 組合 插入 span app xxx view 一個 otto
引用自:48036839
一、在組成SQL語句並發送命令時完全按照Python中的樣式去傳遞,這樣在MySql中執行的時候就會遇到錯誤的命令,由單引號或者雙引號引起。因此應該在組成字串之前,手動將字串中的單引號或者雙引號之前加上反斜線,這樣在組合成字串的時候,MySql就能夠識別了。例如:str="""select count(*) from %s where %s.AppId="%s" """%(self._TB_NAME,self._TB_NAME,appid)print strcur.execute("%s"%(str)) 如果appid是一種含有單引號或者雙引號的變數,例如 I‘m XXX and say "hi!"在這個變數中含有單引號,雙引號。這樣組成的SQL語句為:select count(* )from table where table.AppId =" I‘m XXX and say "hi!""這樣的話,這個SQL語句明顯就會出錯。因此在組成str之前應該對appid中的單引號雙引號進行處理。使用replace方法將單引號和雙引號前面加上反斜線。appid=appid.replace("‘","\\\‘") 將單引號轉成\單引號appid=appid.replace(‘"‘,‘\\\"‘) 將雙引號轉成\雙引號這樣在組成的SQL語句就成了select count(* )from table where table.AppId =" I\‘m XXX and say \"hi!\""這樣MySql就將字串中的單引號雙引號正確識別了。 二、python向mysql資料庫插入資料時經常會碰到一些特殊字元,如單引號,雙引號。
解決辦法:
cur.execute(u‘‘‘update table set name = %s where id = %s;‘‘‘ , (name.decode(‘utf-8‘),index))
舉例:
name="I‘mHere"
注意: cursor.execute()可以接受一個參數,也可以接受兩個參數:
(1) cur.execute("insert into resource(cid,name) values(%s, %s)" , (12,name) );
這種格式是接受兩個參數,MySQLdb會自動替你對字串進行轉義和加引號,不必再自己進行轉義,執行完此語句之後,resource表中多了一條記錄: 12 I‘mHere
(2) cur.execute("insert into resource(cid,name) values(%s, %s)" % (12,name) );
這種格式是利用python的字串格式化自己產生一個query,也就是傳給execute一個參數,此時必須自己對字串轉義和增加引號,即上邊的語句是錯誤的,應該修改為:
name = MySQLdb.escape_string(name);
cursor.execute("insert into resource(cid,name) values(%s, ‘%s‘)" % (12,name) );
這樣插入的記錄才和(1)一樣:12 I‘mHere個人分類: Pythonmysql
python 字串組成MySql 命令時,字串含有單引號或者雙引號導致出錯解決辦法