Python mysql.connector InternalError:关闭光标时发现未读结果

我想从光标读取部分结果,然后关闭它而不读取所有结果。 cursor.close()引发InternalError: Unread result found.是否可以在不重复所有结果的情况下关闭游标或使用缓冲区选项?Python mysql.connector InternalError:关闭光标时发现未读结果

更新:

我查询获得约3000条记录,我的目标是获得第几个记录其符合一定的条件。在遍历部分结果后,我得到我想要的。然后,我想放弃未读的结果。我不使用缓冲选项,我知道它会立即读取所有结果。这个问题不重复的Python MySQL connector - unread result found when using fetchone

def chooseInstrumentsFromOrigin(self, time): 

sql = """select symbol, name, total_ratio, outstanding_ratio from market_values

where time = %s order by {captype} asc""".format(captype=self.strategy_data['captype'])

args = [time]

conn = mysql.connector.connect(**mysql_config)

cursor = conn.cursor(dictionary=True)

cursor.execute(sql, args)

# This function will return half way.

symbols = self.chooseInstrumentsFromLeaders(time, cursor)

# I don't want this line!

for i in cursor: pass

cursor.close()

conn.close()

return symbols

回答:

这样看来,你需要:

cursor = conn.cursor(buffered=True,dictionary=true) 

以放弃一个结果中流。

完全公开,我是一个mysql开发人员,而不是一个python开发人员。

请参阅Python手册页码MySQLConnection.cursor() Method和cursor.MySQLCursorBuffered Class。

所有行都立即被读取,为true。对于小到中等尺寸的结果集有幻想。

后者参考上面的状态:

For queries executed using a buffered cursor, row-fetching methods such as fetchone() return rows from the set of buffered rows. For nonbuffered cursors, rows are not fetched from the server until a row-fetching method is called. In this case, you must be sure to fetch all rows of the result set before executing any other statements on the same connection, or an InternalError (Unread result found) exception will be raised.

作为一个侧面说明,您可以通过使用分页修改你的策略。 MySQL的LIMIT clause支持这种与偏移,pageSize的设置:

[LIMIT {[offset,] row_count | row_count OFFSET offset}] 

以上是 Python mysql.connector InternalError:关闭光标时发现未读结果 的全部内容, 来源链接: utcz.com/qa/257525.html

回到顶部