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

Python提取XML数据映射MySQL表:Dataframe无法导入全量数据

问题分析与解决方案

1. 只导入一行/表头的核心原因

你倒数第二行代码里的index=0是致命错误:

df = pd.DataFrame(xmldf_dict["df_dicts"],index=0)

指定index=0会强制让pandas只生成一行数据(因为索引长度为1,和字典列表的实际长度不匹配,pandas会直接截断数据),直接去掉这个参数就能导入全部行。另外你已经处理好包含缺失列的final_df,完全没必要重新创建df,直接用final_df导入更合理。

2. 解决MySQL连接丢失(Error 2013)问题

这个错误通常是数据量过大,一次性导入超时导致连接断开,有两个直接解决方法:

  • 分批次导入:在to_sql中添加chunksize参数,控制每次写入的行数,比如每次导入1000行:
    final_df.to_sql(con=my_conn, name='postlinks', if_exists='append', index=False, chunksize=1000)
    
  • 延长连接超时时间:创建引擎时添加连接参数,拉高超时阈值:
    my_conn = create_engine(
        "mysql+mysqldb://sqluser:password@localhost/stackexchange_project",
        connect_args={'connect_timeout': 120}  # 设置为120秒,可根据数据量调整
    )
    
    若仍出现问题,可检查MySQL服务器的wait_timeout和interactive_timeout配置,适当调大这两个参数的值(需修改my.cnf/my.ini后重启服务)。

3. 修复代码中的其他潜在问题

  • missing_col类型错误:你定义missing_col = [](列表),但用了missing_col.add(k)——列表没有add方法,会触发报错。改成集合来避免重复列名:
    missing_col = set()  # 改为集合
    ...
    missing_col.add(k)  # 集合支持add方法
    
  • 使用处理好的final_df导入:你已经合并了缺失列的final_df,但最后没用到,直接用它导入才能保证所有列都写入数据库。

修正后的关键代码片段

# 修复missing_col的类型
missing_col = set()
xmldf_dict = {"df_dicts":[]}
for elem in root:
    df_dict = {}
    for k,v in mapping_dict.items():
        if k in ['Body']:
            continue
        try:
            df_dict[k] =  elem.attrib[v]
        except KeyError:
            missing_col.add(k)
    xmldf_dict["df_dicts"].append(df_dict)

# 合并缺失列(集合转列表)
missing_col_df = pd.DataFrame(columns=list(missing_col))
xml_df = pd.DataFrame(xmldf_dict["df_dicts"])
final_df = pd.concat([xml_df, missing_col_df], axis=1)

# 创建引擎并分批次导入
my_conn = create_engine(
    "mysql+mysqldb://sqluser:password@localhost/stackexchange_project",
    connect_args={'connect_timeout': 120}
)
final_df.to_sql(con=my_conn, name='postlinks', if_exists='append', index=False, chunksize=1000)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:27