mysql 连接器内部错误:关闭游标时发现未读结果

0qx6xfy6  于 2022-12-17  发布在  Mysql
关注(0)|答案(2)|浏览(288)

我想从游标读取部分结果,然后关闭它而不阅读所有结果。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
jv4diomz

jv4diomz1#

为了中途放弃结果集,您似乎需要以下内容。

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

充分披露,我是一个mysql开发人员,不是python开发人员。
参见Python手册MySQLConnection.cursor() Methodcursor.MySQLCursorBuffered Class
所有行都立即读取,真的。对于中小型结果集来说是极好的。
上述后一条规定:
对于使用缓冲游标执行的查询,行提取方法(如fetchone())将返回缓冲行集中的行。对于非缓冲游标,只有在调用行提取方法后才能从服务器提取行。在这种情况下,必须确保在同一连接上执行任何其他语句之前提取结果集中的所有行,否则将引发InternalError(Unread result found)异常错误。
顺便说一句,你可以使用分页来修改你的策略,MySQL LIMIT clause支持这个,它有偏移量和页面大小设置:

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

neekobn82#

您所要做的就是在光标中输入buffered = true。阅读更多官方docs

cursor = conn.cursor(buffered=True)

相关问题