我使用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命令对已经完成的数据库失败.不确定是否会导致问题.
我想从游标中读取部分结果,然后在不读取所有结果的情况下关闭它。cursor.close()raisesInternalError: Unread result found.是否可以在不遍历所有结果或使用缓冲区选项的情况下关闭游标?
更新:
我的查询获得大约 3000 条记录,我的目标是获得符合某些条件的前几条记录。在迭代部分结果后,我得到了我想要的。然后我想放弃未读的结果。我不使用缓冲区选项,据我所知,它会立即读取所有结果。这个问题不是Python MySQL 连接器的重复- 使用 fetchone 时发现未读结果
def chooseInstrumentsFromOrigin(self, time):
sql = """select symbol, name, total_ratio, outstanding_ratio from market_values
where time = %s order by {captype} asc""".format(captype=self.strategy_data['captype'])
args = [time]
conn = mysql.connector.connect(**mysql_config)
cursor = conn.cursor(dictionary=True)
cursor.execute(sql, args)
# This function will return half way.
symbols = self.chooseInstrumentsFromLeaders(time, cursor)
# I don't want this line!
for i in cursor: pass
cursor.close()
conn.close()
return symbols
Run Code Online (Sandbox Code Playgroud)