在Python 中使用MySQL 的預準備語句
當嘗試透過直接使用SQL 在Python 中使用預先準備語句時,使用者可能會遇到錯誤例如「您的SQL 語法有錯誤」。當執行以下語句時可能會發生這種情況:
sql = "PREPARE stmt FROM ' INSERT INTO {} (date, time, tag, power) VALUES (?, ?, ?, ?)'".format(self.db_scan_table) self.cursor.execute(sql)
後跟:
sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power) self.cursor.execute(sql)
要解決此問題,了解 Python 缺乏準備語句的內在機制至關重要。相反,我們可以利用遊標物件的execute()方法動態地準備和執行語句。
例如:
sql = ('INSERT INTO {} (date, time, tag, power) VALUES ' '(%s, %s, %s, %s)'.format(self.db_scan_table)) self.cursor.execute(sql, (d, t, tag, power))
這種方法減少了對額外字串格式化的需要,如MySQLdb 模組自動處理語句的準備和執行。
此外,值得考慮的是,如果提到的循環僅涉及資料插入,則對 .execute_many() 的一次調用將元組序列作為第二次調用argument 可以取代整個循環,提高效率。
此外,mysql 的 Connector/Python 提供了一個更好的替代方案,它在 .cursor() 中提供了prepare=True 選項。這允許明確準備語句(利用高效的二進位協定),同時允許對最好不准備的語句使用另一個遊標。
以上是如何在 Python 中使用 MySQL 的預先準備語句:避免語法錯誤和最佳化效能的指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!