在 mysql.connector (python) 中创建游标时,连接到旧 MySQL 服务器后,我收到“未读结果找到”

问题描述 投票:0回答:1

我有两台 MySQL 服务器,一台古老的版本 5.7.17 和一台较新的 8.0.12。我的 python 脚本在连接到新数据库后执行没有任何问题,但在尝试在旧服务器上执行任何操作时抛出“未读结果找到”异常(它确实连接)。

这个问题与我见过的任何其他“发现未读结果”问题不同,因为设置

buffered=True
buffered=False
或光标中的其他任何内容都没有效果。看看这个示例代码:

try:
    database = mysql.connector.connect(
        user="...", 
        password="...", 
        database="...", 
        host="...", 
        port=3306, 
        autocommit=True
    )
except mysql.connection.Error as err:
    print(err.msg)
    exit(1)

try:
    print("A")
    cursor = database.cursor() # empty, buffered=True, buffered=False, anything, it doesn't change anything
    print("B")
    cursor.execute("SELECT * FROM some_table;")
    print("C")
    data = cursor.fetchall()
except mysql.connector.Error as err:
    print("D")
    print(err.msg)

在这种情况下,脚本将在

database.cursor()
打印出 A、D 并在控制台中显示错误消息时崩溃。我读过的所有其他问题都指向 fetchone 或 fetchall 方法,但是在我的代码中,这些方法甚至没有执行。

有问题的服务器上的 TLS 版本 TLSv1、TLSv1.1。良好服务器上的 TLS 版本 TLSv1、TLSv1.1、TLSv1.2。

MySQL 服务器是指 MySQL,而不是 MariaDB。

我没有做什么:从 mysql.connector 迁移到其他 MySQL python 库 - 这将需要重写整个应用程序,而我没有时间这样做。


按要求追溯:

Traceback (most recent call last):
  File "/mnt/c/Users/{removed}/Desktop/{removed}/{removed}/./dumpToFile", line 155, in <module>
    row_count = cm.{removed function name}(attribute, single_day, mdb, sdb)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/c/Users/{removed}/Desktop/{removed}/{removed}/conv_methods.py", line 298, in {removed function name}
    mysql_cursor = mdb.cursor(buffered=True)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 868, in cursor
    self.handle_unread_result()
  File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 1132, in handle_unread_result
    raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found
python mysql mysql-connector
1个回答
0
投票

在查看 mysql.connector 源代码时,我发现在某些情况下可能需要

consume_results=True
,这最终解决了我的问题!

由于未知原因,拉取结果需要一些时间,但它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.