我以这种方式运行许多 SQL 脚本:
db_conn = (created earlier)
cursor = db_conn.cursor()
script_file = open(join(script_path, script_name))
script_text = script_file.read()
script_file.close()
num_rows = cursor.executemany(script_text, None)
这在我的 Mac 上就像一个魅力,但在 Linux 上失败了,executemany(...)
只是不执行任何操作并返回 None
。连接设置很好:它们在两个系统上都是相同的,我可以手动执行 SQL 脚本,即使用 mysql 命令行客户端。另外,MySQLDB.execute(...)
对于较短的 SQL 语句可以正常工作,但随后可能会在存储过程定义中更改分隔符时失败(无论如何都会报告 DELIMITER 行周围的 SQL 错误)。
有人遇到过类似的事情吗?
有人在 Linux 上成功使用 executemany()
吗?
版本:
- Mac OS X 10.6.4
- mysql Ver 14.14 Distrib 5.1.39,适用于 apple-darwin9.5.0 (i386),使用 readline 5.1
MySQL_python-1.2.3-py2.6-macosx-10.6-universal
Kubuntu 10.10
- mysql Ver 14.14 Distrib 5.1.49,适用于 debian-linux-gnu (i686),使用 readline 6.1 MySQL_python-1.2.3-py2.6-linux-i686 (默认的Kubuntu包是1.2.2,所以我手动升级)
(出于某种原因,在 Kubuntu 10.10 之后有一个额外的空行,我似乎无法摆脱,可能是 stackoverflow bug...)
最佳答案
检查您是否正确升级到 1.2.3 ...我记得读到过,1.2.2 有一个错误导致了executemany 出现问题。
关于Python MySQLDBexecutemany()在mac上工作,在linux上不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200691/