Python API將作爲特定產品屬性的值返回u"'HOPPE'S No. 9'"
。然後我期待將其插入到數據庫,還使用Python(蟒蛇-MySQLdb的),用下面的查詢:如何處理MySQL-Python中的撇號?
INSERT INTO mytable (rating, Name) VALUES('5.0 (7)', 'HOPPE'S No. 9';
MySQL的拒絕這一點,建議的方式在MySQL處理單引號是escape it first。我需要在Python中完成,所以我嘗試:
In [5]: u"'HOPPE'S No. 9'".replace("'", "\'")
Out[5]: u"'HOPPE'S No. 9'"
當我將它加入到我的程序中時,MySQL仍然拒絕它。所以我雙 - 逃生撇號,然後插入成功發生。事情是,它包含轉義字符(所以寫的是'HOPPE'S第9')。
如果我需要第二個轉義字符,但是當我將它添加進去時,那麼如何處理轉義而不在轉義字符中包含插入的字符串呢?
編輯:基於theBjorn的建議,嘗試:
actualSQL = "INSERT INTO %s (%s) VALUES(%s);"
#cur.execute(queryString)
cur.execute(actualSQL,
(configData["table"], sqlFieldMappingString, sqlFieldValuesString))
但它看起來像我回到我在那裏當我試圖用單一的逃生與.replace()
逃脫:
Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''mytable' ('rating, Name, Image, mfg, price, URL') VALUES('\'5.0 (3)\', \'AR-1' at line 1
在SQL中,您通過加倍引用單引號,但爲什麼不使用參數? – thebjorn
參數化僅用於值子句。注意我每個值都有一個'%s',並且在sql和值元組之間有一個逗號(這不是字符串插值!) – thebjorn
@thebjorn好所以現在的問題是我是字符串格式的configData [「表「]和sqlFieldMappingString,當我不應該。問題是:我無法像下面那樣對列名進行硬編碼,因爲它們將分別來自變量* configData [「table」] *和* sqlFieldMappingString *。 – Pyderman