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

使用openpyxl加载XLSX到DataFrame,代码遍历正常但无法写入数据库求修复

问题排查与修复方案

我看了你的代码,发现几个关键问题导致你没法把数据写入数据库,咱们一步步来梳理修复:

1. DataFrame拼接时的变量更新错误

你现在用d= pd.concat([df,a])把新读取的表格数据和a拼接,但完全没把拼接后的结果存回a——这就意味着每次循环完,a还是一开始的空DataFrame,最后根本没有数据能拿去写数据库。

修复很简单,直接把拼接结果赋值回a,记得加上ignore_index=True避免索引重复:

a = pd.concat([a, df], ignore_index=True)

2. 路径拼接的坑

你用r'path'+file拼路径的方式很容易出错,如果你的path结尾没加路径分隔符(比如Windows下的\),生成的路径会变成pathfile1.xlsx这种错误格式,应该用os.path.join()来安全拼接,它会自动处理不同系统的路径分隔符:

file_path = os.path.join(r'path', file)
wb = openpyxl.load_workbook(file_path)

3. 你漏了写入数据库的核心逻辑

你的代码只完成了数据收集的部分,压根没写把数据存进数据库的代码。这里给你补一个通用的示例(以MySQL为例,其他数据库逻辑类似,只需要改连接字符串):

首先得装依赖:

pip install sqlalchemy pymysql

然后在收集完所有数据后,加上这段写入逻辑:

from sqlalchemy import create_engine

# 替换成你自己的数据库信息:用户名、密码、主机、端口、数据库名
engine = create_engine('mysql+pymysql://username:password@host:port/database_name')

# 写入数据库,if_exists可选'replace'(覆盖表)或'append'(追加数据)
a.to_sql(name='你的表名', con=engine, if_exists='append', index=False)

修复后的完整代码

import pandas as pd
import os
import openpyxl
from sqlalchemy import create_engine

# 替换成你的目标文件夹路径
folder_path = r'path'
files = [file for file in os.listdir(folder_path)]
a = pd.DataFrame()

for file in files:
    # 安全拼接文件路径
    file_path = os.path.join(folder_path, file)
    wb = openpyxl.load_workbook(file_path)
    print(wb)
    for ws_name in wb.sheetnames:
        ws = wb[ws_name]
        data = ws.values
        columns = next(data)[0:]
        df = pd.DataFrame(data, columns=columns)
        # 更新拼接后的DataFrame
        a = pd.concat([a, df], ignore_index=True)
        print(a)

# 写入数据库
engine = create_engine('mysql+pymysql://username:password@host:port/database_name')
a.to_sql(name='your_table_name', con=engine, if_exists='append', index=False)

最后提几个小细节:

  • 如果你的Excel文件表头格式不统一,可能需要先做数据清洗,确保列名一致后再拼接,不然会生成很多空列。
  • 如果要处理的文件特别大,建议不要把所有数据都存在内存里,可以读一个文件就写一次数据库,避免内存不够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:33:11