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)

你可能感兴趣的:(python)