我想从游标读取部分结果,然后关闭它而不阅读所有结果。cursor.close()
引发InternalError: Unread result found.
是否可以关闭游标而不迭代所有结果或使用缓冲区选项?
更新:
我的查询得到了大约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
2条答案
按热度按时间jv4diomz1#
为了中途放弃结果集,您似乎需要以下内容。
充分披露,我是一个mysql开发人员,不是python开发人员。
参见Python手册MySQLConnection.cursor() Method和cursor.MySQLCursorBuffered Class。
所有行都立即读取,真的。对于中小型结果集来说是极好的。
上述后一条规定:
对于使用缓冲游标执行的查询,行提取方法(如fetchone())将返回缓冲行集中的行。对于非缓冲游标,只有在调用行提取方法后才能从服务器提取行。在这种情况下,必须确保在同一连接上执行任何其他语句之前提取结果集中的所有行,否则将引发InternalError(Unread result found)异常错误。
顺便说一句,你可以使用分页来修改你的策略,MySQL
LIMIT clause
支持这个,它有偏移量和页面大小设置:neekobn82#
您所要做的就是在光标中输入
buffered = true
。阅读更多官方docs