我在一个小脚本中使用python mysql连接器。我面临的问题是:当执行返回0行的select语句时,我无法关闭游标。关闭游标时,会触发“mysql.connector.errors.InternalError:Unread result found”。但是,调用fetchall()会导致“mysql.connector.errors.InterfaceError:No result set to fetch from”。错误。
所以基本上,由于一些未读数据,我无法关闭光标,因为没有数据可读,所以我无法读取任何数据。
答案 0 :(得分:1)
这个问题已经有一段时间了,但我会发布我发现的解决方案。
使用python的官方mysql连接器,在请求之前不会从服务器获取行。因此,如果有剩余的行,尝试关闭连接会引发异常。一种选择是使用缓冲光标。缓冲光标从服务器读取所有行,光标可以在任何时候关闭。但是,这种方法会带来内存成本。
对于mysql连接器,每个连接有一个打开游标的硬限制。试图打开另一个游标会引发异常。
答案 1 :(得分:0)
怎么样:
if cur.rowcount:
cur.fetchall()
else:
#whatever you want to do
答案 2 :(得分:0)
我使用这个逻辑处理空SQL:
import MySQLdb
cursor = db.cursor()
sql = "SELECT * FROM foobar"
dta = cursor.execute(sql)
if dta == 0:
print "0 MySQL Entries found"
cursor.close()
假设我正确理解了你的问题,你不能因为w / e原因而关闭光标。您可以通过简单地重新分配光标来“重新定位”光标而不关闭光标:
cursor = db.cursor()
doStuff()