gpt4 book ai didi

python - MySQL 未读结果与 Python

转载 作者:IT王子 更新时间:2023-10-28 23:48:57 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com