使用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连接器/ Python中, 发现未读的结果 ,当您使用在不同的地方连接对象而不读取结果可能发生。这不是一个可以解决的问题。您可以使用
缓冲 选项立即读取结果。如注释中所述,最好拆分语句并分别执行。
如果要执行多个语句,则需要对MySQLCursor.execute()方法使用 multi = True
选项(自Connector / Python
v1.0.4起)。实际上,如果您不使用 multi 选项并发送多个语句,则将引发InterfaceError。(我也怀疑这里有一个错误。)附加说明:
- 可以执行MySQLConnection.database属性,而不是执行USE命令来更改数据库。
- 最好将更改分组到一个ALTER TABLE语句中,如下所示:
更改表t1删除主键,添加ID INT不为空AUTO_INCREMENT关键字优先,添加索引(c1)