python - MySQL 未读结果与 Python

标签 python mysql

我使用mysql.connector 做SQL 操作。 我有一个简短的脚本,它使用 cursor.execute(...) 在光标上执行以下操作(字符串):

"use {}".format(db)

"show tables"

command = """
ALTER TABLE Object DROP PRIMARY KEY;
ALTER TABLE Object ADD `id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
ALTER TABLE Object ADD INDEX (`uid`);"""

脚本遍历多个数据库db

问题是有时我会收到“未读结果”错误。似乎当我运行脚本时,在某些时候“使用 mydb”会返回一个结果(cursor._have_result=True),而我没想到会这样。奇怪的是,如果我重新运行完整的脚本,它会运行更长的时间,更多的数据库稍后会给出相同的错误。

您能否提出解决或调查此问题的方法?有什么办法可以防止“未读结果”吗?

PS:当我重新运行脚本时,对于已经完成的数据库,ALTER 命令会失败。不确定这是否会导致问题。

最佳答案

使用 MySQL Connector/Python,Unread results found 可能发生在您在不同地方使用连接对象而不读取结果时。这不是一个人可以绕过的事情。您可以使用 buffered option立即读取结果。

评论中提到,最好拆分语句,分别执行。

如果你想执行多条语句,你需要使用multi=True option for the MySQLCursor.execute()方法(自 Connector/Python v1.0.4 起)。实际上,如果您不使用 multi 选项并发送多个语句,则会引发 InterfaceError。 (我也怀疑这里有一个错误..)

补充说明:

  • 您可以MySQLConnection.database property 而不是执行USE 命令来更改数据库。 .
  • 您最好将更改分组到一个 ALTER TABLE 语句中,如下所示:

    ALTER TABLE t1 DROP PRIMARY KEY,ADD id INT NOT NULL AUTO_INCREMENT KEY FIRST,ADD INDEX(c1)

关于python - MySQL 未读结果与 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336767/

相关文章:

php - 在 mysql 和 php 中使用 foreach

http连接中的Android身份验证错误android.os.networkonmainthreadException

MySQL 错误 1045 (28000) : Access denied for user 'bill' @'localhost' (using password: YES)

python - 将单个字典值从字符串转换为整数?

python - Gcloud函数使用特定的python文件和特定的函数名称进行部署

python - 我应该更新 Python 模块吗?

python - 创建包含计算的数据箱和数据框

python - "Insufficient Permission: Request had insufficient authentication scopes"即使是最通用的范围

php - SQLSTATE[HY000] [2002] 出于安全原因,已禁用在远程端口 3306 上建立 tcp 连接

mysql - 不明确的 `id` 字段