You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Python3.9.5后pandas+pymysql查询数据异常求助

Python3.9下pandas+pymysql读取DataFrame内容异常解决办法

问题根源

这是pymysql 1.1.0版本和Python3.9、pandas1.3的兼容性bug——使用DictCursor时,pandas无法正确解析游标返回的字典结构数据,错误地把列名重复填充到每个单元格里。

可行解决方法

1. 替换游标类型

去掉cursorclass=mysql.cursors.DictCursor配置,用默认的游标(或者显式指定Cursor):

conn = mysql.connect(host='xxxxxxxxxxxxxxxx',
                     user='xxxxxxxxxxxxxx',
                     password='xxxxxxxxxxxxxxxx',
                     db='xxxxxxxxxxxx',
                     charset='utf8',
                     port=xxxxxxxxxxx)
# 或者显式指定
# conn = mysql.connect(..., cursorclass=mysql.cursors.Cursor)

默认游标返回元组格式的查询结果,pandas能正常解析生成正确的DataFrame。

2. 升级pymysql版本

pymysql后续版本修复了这个Python3.9下的兼容性问题,直接升级到1.1.1及以上版本即可:

pip install --upgrade pymysql

3. 手动处理查询结果

如果暂时不能改游标或升级库,可以手动执行查询再转DataFrame:

import pandas as pd
import pymysql as mysql

conn = mysql.connect(host='xxxxxxxxxxxxxxxx',
                     user='xxxxxxxxxxxxxx',
                     password='xxxxxxxxxxxxxxxx',
                     db='xxxxxxxxxxxx',
                     charset='utf8',
                     port=xxxxxxxxxxx,
                     cursorclass=mysql.cursors.DictCursor)

somesql = """SELECT * FROM SOMETABLE;"""

with conn.cursor() as cursor:
    cursor.execute(somesql)
    # 直接获取字典列表后转DataFrame
    df = pd.DataFrame(cursor.fetchall())

内容的提问来源于stack exchange,提问作者Derek_P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:00:01