我使用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`);"""
Run Code Online (Sandbox Code Playgroud)
该脚本遍历多个数据库db.
问题是,在某些时候我收到"未读结果"错误.看来,当我运行脚本时,"使用mydb"会返回一个结果(cursor._have_result = True),当时我没想到.奇怪的是,如果我重新运行完整的脚本,它会运行一段时间,更多的数据库会在以后发出相同的错误.
你能建议一种解决或调查这个问题的方法吗?我能做些什么来防止"未读结果"?
PS:当我重新运行脚本时,ALTER命令对已经完成的数据库失败.不确定是否会导致问题.
gee*_*vdk 12
使用MySQL连接器/ Python中,发现未读的结果,当您使用在不同的地方连接对象而不读取结果可能发生.这不是一个可以绕过的东西.您可以使用buffered选项立即读取结果.
正如评论中所提到的,最好将语句拆分并分别执行.
如果要执行多个语句,则需要对MySQLCursor.execute()方法使用multi = True选项(因为Connector/Python v1.0.4).实际上,如果您不使用multi选项并发送多个语句,则会引发InterfaceError.(我确实怀疑这里有一个bug ..)
补充说明:
您最好将更改分组到一个ALTER TABLE语句中,如下所示:
ALTER TABLE t1 DROP PRIMARY KEY,ADD id INT NOT NULL AUTO_INCREMENT KEY FIRST,ADD INDEX(c1)
小智 5
你必须传入buffered = true你的光标。阅读更多官方文档
cursor = conn.cursor(buffered=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19446 次 |
| 最近记录: |