在 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中文网其他相关文章!