gpt4 book ai didi

python - 在 python 中将准备好的语句与 mysql 一起使用

转载 作者:太空狗 更新时间:2023-10-29 22:18:56 24 4
gpt4 key购买 nike

我正在尝试在 Python 中将 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)

在循环中我得到:

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''2014-12-25', '12:31:46', 88000000, -6.64' at line 1

这是怎么回事?

最佳答案

例如在 http://zetcode.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.cursor() prepare=True 选项 工厂 -- 参见 http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html .这让你有一个特定的游标,用于准备语句(根据 mysql.com 页面,使用“比使用 PREPARE 和 EXECUTE 更有效”的二进制协议(protocol))和另一个用于最好不要准备的语句; “显式优于隐式”毕竟是“Python 之禅”中的原则之一(import this 从交互式提示中阅读所有这些原则)。 mysqldb 隐式地做事(似乎当前的开源版本使用准备好的语句)不能像 Connector/Python 那样是一个好的架构 更明确。

关于python - 在 python 中将准备好的语句与 mysql 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com