Python mysql.connector查询截断及无结果集报错求助
排查思路与解决方案
切换MySQL Connector/Python的实现模式
部分版本的纯Python实现对大结果集处理存在兼容性问题,尝试在连接时添加use_pure=False参数,强制使用C扩展实现:db = mysql.connector.connect( # 你的认证信息 use_pure=False )改用服务器端游标(SSCursor)
客户端缓冲游标(buffered=True)会将所有结果加载到本地内存,大结果集场景下易出现截断或异常。服务器端游标支持流式处理结果,避免内存和截断问题:from mysql.connector.cursor import SSCursor cursor = db.cursor(cursor_class=SSCursor) 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 = [] while True: chunk = cursor.fetchmany(1000) if not chunk: break rows.extend(chunk)清理未读取的结果集
即使调用了fetchall(),仍可能存在隐藏结果集(如查询返回的警告或多结果集),导致后续查询报错。在第一个查询后执行清理:rows = cursor.fetchall() # 遍历并清理所有剩余结果集 while cursor.nextset(): pass升级mysql.connector到最新版本
旧版本驱动与MySQL 8.0.32可能存在兼容性bug,执行升级命令修复潜在问题:pip install --upgrade mysql-connector-python检查游标警告信息
查询执行后,查看是否有未捕获的警告,这些信息可能揭示结果集截断的原因:cursor.execute(query) warnings = cursor.fetchwarnings() if warnings: print(warnings)
内容的提问来源于stack exchange,提问作者user1836463
相关产品推荐
相关产品推荐

