例如,在http://zetpre.com/db/mysqlpython/上解释了如何在Python中使用MySQL准备好的语句-
在该页面中查找
Prepared statements。
在您的情况下,例如:
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(用元组序列作为第二个参数)可以代替整个循环(除非您需要在其中进行更多处理)循环,而不仅仅是将数据插入数据库)。
补充:如今,更好的替代方法可能是在工厂中使用mysql自己
Connector/Python的显式
prepare=True选项
.cursor()-请参阅http://dev.mysql.com/doc/connector-
python/en/connector-python-api-
mysqlcursorprepared.html。这使您可以使用一个特定的游标来准备语句(根据该mysql.com页面,该语句具有“比使用PREPARE和EXECUTE更有效”的二进制协议),而另一个则用于未准备好的语句。毕竟,“善于胜于隐含”
是 “ Python的禅宗”中的一项原则(
import this从交互式提示中阅读所有这些原则)。
mysqldb隐式地做事(而且当前的开源版本 似乎没有 使用准备好的语句)不能像
Connector/Python更明确的架构那样好。



