我使用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/