You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:15