如何使用python mysql连接器正确处理空数据集?

时间:2016-12-12 12:44:34

标签: python mysql

我在一个小脚本中使用python mysql连接器。我面临的问题是:当执行返回0行的select语句时,我无法关闭游标。关闭游标时,会触发“mysql.connector.errors.InternalError:Unread result found”。但是,调用fetchall()会导致“mysql.connector.errors.InterfaceError:No result set to fetch from”。错误。

所以基本上,由于一些未读数据,我无法关闭光标,因为没有数据可读,所以我无法读取任何数据。

3 个答案:

答案 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()