使用Python的MySQL未读结果

发布于 2021-01-29 15:26:08

我使用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命令失败。不知道这是否会引起问题。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用MySQL连接器/ Python中, 发现未读的结果 ,当您使用在不同的地方连接对象而不读取结果可能发生。这不是一个可以解决的问题。您可以使用
    缓冲 选项
    立即读取结果。

    如注释中所述,最好拆分语句并分别执行。

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

    附加说明:

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

    更改表t1删除主键,添加ID INT不为空AUTO_INCREMENT关键字优先,添加索引(c1)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看