我希望有人可能已经看到类似的东西之前,我不知道下一步要做什么调试它。
如果我在一个特定的表上运行下面的mysql查询,我会得到一个成功返回的结果集,但它只包含165行-即如果我添加'limit 200',我仍然会得到一个结果集,但只包含165行。如果我打印正在运行的查询并将其粘贴到mysql控制台,我可以得到超过100,000个返回结果。
选择table1.field1,table2.field2,从table 1左边连接table 2上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()```
1条答案
按热度按时间dgjrabp21#
在调试了一些其他奇怪的行为之后--通过python选择返回的结果比通过mysql客户端少--我发现将我的游标请求更改为:
cursor = db.cursor(prepared=True)
...然后使用.decode()从字节数组转换每个字符串结果似乎可以解决这个问题,但我不知道为什么!