Python 连接器错误 - 没有结果集。上一个查询包含截断的结果

Python connector error - no result set. Previous query contains truncated results

提问人:iwmike 提问时间:3/29/2023 更新时间:3/29/2023 访问量:33

问:

我希望有人以前可能见过类似的东西,我不知道下一步该怎么做才能调试它。

如果我在特定表上运行以下形式的 mysql 查询,我会得到一个成功返回的结果集,但它最多只包含 165 行 - 即如果我添加“limit 200”,我仍然会得到一个结果集,但只包含 165 行。如果我打印正在运行的查询并将其粘贴到 mysql 控制台中,我可以返回超过 100,000 个结果。

选择 table1.field1,table2.field2,从 table1 左连接 table2.keyfield 上的 table2.keyfield = table1.keyfield;

如果我对查询施加了 165 行的限制,那么我可以运行另一个查询。如果我不施加 165 或更少的限制,当我尝试执行下一个查询时,我收到异常“mysql.connector.errors.InterfaceError:没有结果集可从中获取”

我在 Windows 和 Linux 中运行 Python 脚本得到了相同的结果。目标MySQL服务器为V8.0.32,运行在Linux机箱上。

伪代码在下面,我只删除了 mysql 凭据和实际查询(如果有帮助,我可以包含实际查询,但已验证它是否按照 mysql 控制台中的描述运行,返回>100,000 个结果)。谁能提供任何建议?

    
db = mysql.connector.connect(
    ....credentials...
)

cursor = db.cursor(buffered=True)
query = "select  table1.field1,table1.field2,table1.field3,table2.field4, table2.field5  from table1 left join table2 on table2.keyfield = table1.keyfield;"    
cursor.execute(query,[])
rows = cursor.fetchall()
# if I print len(rows), there will only be 165 items despite there being > 100,000 results

# If I now run the below, I'll get 'mysql.connector.errors.InterfaceError: No result set to fetch from'
query = "select * from table1;"
cursor.execute(query,[])
rows = cursor.fetchall()```

python 异常 mysql-connector

评论


答:

0赞 iwmike 3/29/2023 #1

在调试了其他一些奇怪的行为之后 - 选择通过 python 返回的结果比通过 mysql 客户端返回的结果少 - 我发现将我的光标请求更改为:cursor = db.cursor(prepared=True)

...然后使用 .decode() 从字节数组转换每个字符串结果似乎可以解决问题,但我不知道为什么!只是将其作为一种解决方法,以防其他人遇到类似的问题