mysql.connector.errors.InternalError: Unread result found

代码如下:

import mysql.connector
mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    passwd = "password",
    database = "mypy",
    )

mycursor = mydb.cursor() 
mycursor.execute("select * from table1")
allresult = mycursor.fetchall()
for x in allresult:
    print("x:", x)
    # print("x[1]:", x[1])

mycursor.execute("select num, name1 from table1")
oneresult = mycursor.fetchone()
print(oneresult)

mycursor.execute("select * from table1 where group2 like '%tri%' ")
groupresult = mycursor.fetchall()
# print("groupresult是:", groupresult)
for y in groupresult:
    print(y)

执行结果:

Traceback (most recent call last):
  File "C:/mysql_try.py", line 20, in <module>
  mycursor.execute("select * from table1 where group2 like '%tri%' ")
  File "C:\Python\Python36\lib\site-packages\mysql\connector\cursor.py", line 529, in execute
    self._connection.handle_unread_result()
  File "C:\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 1063, in handle_unread_result
    raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found

分析:
执行sql语句查询后,MySQLCursorBuffered游标标从服务器获取整个结果集并将他们放在缓冲区中。
Buffered游标适用于多个小结果集的查询,且多个结果集之间的数据需要一起使用。
使用buffered游标执行查询语句时 ,取行方法(如fetchone(),fechcall()等)返回的是缓冲区中的行。nonbuffered游标不从服务器获取数据,直到调用了某个获取数据行的方法, 在使用nonbuffered游标时,必须确保取出的结果是结果集中的所有行,才能再用同一连接执行其他语句,否则会报错InternalError(Unread result found)。

解决方法:

  1. 创建buffered游标,设置buffered 参数为"True"
mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    passwd = "password",
    database = "mypy",
    buffered = True
)
  1. 设定连接参数时,将所有通过该连接创建的游标默认置设置为buffered=True
bucn = mysql.connector.connect(buffered=True)
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值