我正在嘗試將資料串列傳遞到 MySQL 資料庫中,但對于我的生活,我無法弄清楚我做錯了什么,即使在互聯網上搜索解決方案后我決定在這里發布一個問題。
我可以毫無問題地連接到資料庫,并且發送像“SHOW TABLES”這樣的簡單查詢就像一個魅力,但是當試圖將串列的內容傳遞到 MySQL 時就不起作用了。這里的代碼與我的作業一樣接近,但由于電子郵件地址而出現錯誤。
錯誤是:“您的 SQL 語法有錯誤...靠近 '@gmail.com, x123, False ...”
cursorObject = database.cursor()
#data is a list of lists
data = [['w0', 'firstName', lastName', [email protected]', 'x123', False, '12345', [], Europe, True], ...]
for i in data:
queryString = 'INSERT IGNORE INTO `database` (foo1, foo2, foo3, foo4, foo5, foo6,
foo7, foo8, foo9, foo10) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' % (i[0], i[1],
i[2], i[3], i[4], i[5], i[6], i[7], i[8], i[9])
cursorObject.execute(queryString)
您知道為什么電子郵件中的“@”會導致錯誤嗎?而且,我不知道我是否不小心讓自己容易受到 sql 注入的影響。我嘗試用類似的東西格式化代碼
stringData = ', '.join(['%'] * len(i))
然后將 i 添加為查詢中的第二個引數,但隨后出現“無法轉換 Python 型別串列”錯誤。當我將 i 包裝在一個元組中時,我得到了同樣的錯誤。
附言。我將 data 中的真實資料更改為占位符文本,但它應該可以正常作業。
uj5u.com熱心網友回復:
對于您的第一個問題,您忘記在字串中添加引號。您應該放置 '%s'(在 %s 周圍加上引號),以便最終查詢包含正確參考的字串。
對于您的第二個問題,(a)使用 join 而不是 format 并不能保護您免受 SQL 注入,并且(b)您沒有包含實際資料......
但真正的答案是完全避免使用嵌入式引數值構建字串,而是使用準備好的陳述句。你沒有說你使用哪個python模塊來連接,請查看檔案。如果是 MySql 連接器/Python,您可以使用
statement.execute(queryString, (tuple with the data to insert))
如下所示:https ://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478050.html
