Python3.10创建MySQL表时遇Unread result found错误求助
解决mysql.connector.errors.InternalError: Unread result found错误
问题原因
这个错误的核心是mysql-connector-python的游标中存在未读取的结果集残留——哪怕你当前执行的是CREATE TABLE这类DDL操作,只要之前同一个游标/连接执行过查询(比如SELECT)且未读取完结果,或者游标未启用缓冲,就会触发该错误。
解决方法
1. 清理游标残留结果集
如果在执行CREATE TABLE前,同一个游标执行过查询操作,必须先读取完所有结果,或直接关闭游标重新创建:
# 错误示例:查询后未读结果就执行建表 cursor.execute("SELECT id FROM existing_table") # 未读取结果直接执行建表,触发错误 cursor.execute("CREATE TABLE new_table (id INT PRIMARY KEY, content TEXT)") # 修正方式1:读取所有结果 cursor.execute("SELECT id FROM existing_table") cursor.fetchall() # 读取全部结果,清空游标缓存 cursor.execute("CREATE TABLE new_table (id INT PRIMARY KEY, content TEXT)") # 修正方式2:关闭旧游标,创建新游标 cursor.close() cursor = conn.cursor() cursor.execute("CREATE TABLE new_table (id INT PRIMARY KEY, content TEXT)")
2. 使用缓冲游标
创建游标时设置buffered=True,让游标自动缓存结果集,避免未读取结果的问题:
# 创建缓冲游标 cursor = conn.cursor(buffered=True) # 执行建表操作 cursor.execute("CREATE TABLE user_data (user_id INT, username VARCHAR(50))") # DDL操作建议提交(部分场景下需要) conn.commit()
3. 规范连接与游标的生命周期
确保每次操作后关闭游标,避免复用带残留结果的游标;若开启了事务,建表后记得提交或回滚:
def create_table_from_input(conn, table_name, columns): # 每次创建新游标 with conn.cursor(buffered=True) as cursor: col_defs = ", ".join([f"{col} VARCHAR(255)" for col in columns]) create_sql = f"CREATE TABLE {table_name} ({col_defs})" cursor.execute(create_sql) conn.commit()
额外检查点
- 确认代码中没有在同一个连接下,先执行查询(如
SELECT、SHOW)但未处理结果,就直接执行建表操作; - 若使用了连接池,确保获取的连接没有残留未处理的结果集。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

