代码如下:
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)。
解决方法:
- 创建buffered游标,设置buffered 参数为"True"
mydb = mysql.connector.connect(
host = "localhost",
user = "root",
passwd = "password",
database = "mypy",
buffered = True
)
- 设定连接参数时,将所有通过该连接创建的游标默认置设置为buffered=True
bucn = mysql.connector.connect(buffered=True)