高效处理 Excel 海量数据入库:编程脚本、CSV 中间件、图形工具优化全攻略
处理 Excel 大量数据导入数据库是一个常见的需求。直接使用 Excel 或 Navicat 等工具的图形界面导入,在数据量很大(例如几十万行以上)时,很容易出现超时、内存溢出、卡死等问题。下面提供几种从“简单”到“专业”的完整解决方案,您可以根据数据量、技术能力和频率来选择。
核心思路
处理大量数据的核心原则是:分而治之,流式处理。
避免一次性将整个 Excel 文件加载到内存中,而是分批读取、处理并写入数据库。
方案一:使用编程脚本(推荐,最灵活强大)
这是处理大量数据和自动化任务的最佳选择。以下是两种主流语言的实现方法。
1. Python (使用 Pandas + SQLAlchemy)
Python 在这方面有非常强大的库支持,是数据科学领域的标准工具。
优势:
- 代码简洁,开发效率高。
- 生态系统强大(Pandas 专门为数据处理而生)。
- 跨平台。
步骤:
-
安装库:
pip install pandas sqlalchemy openpyxl pymysql # 根据你的数据库选择:pymysql (MySQL), psycopg2 (PostgreSQL), cx_Oracle (Oracle) 等
-
示例代码:
import pandas as pd from sqlalchemy import create_enginedef import_large_excel_to_db(excel_file_path, table_name, chunksize=50000):"""将大型Excel文件分块导入数据库参数:excel_file_path: Excel文件路径table_name: 目标数据库表名chunksize: 每次读取的行数,根据内存调整"""# 1. 创建数据库连接引擎# 格式:'数据库类型+驱动://用户名:密码@主机:端口/数据库名'engine = create_engine('mysql+pymysql://user:password@localhost:3306/my_database')# 2. 使用 pandas 分块读取 Excel# `openpyxl` 用于 .xlsx 格式reader = pd.read_excel(excel_file_path, engine='openpyxl', chunksize=chunksize)# 3. 循环处理每个数据块for i, chunk in enumerate(reader):# 可选:在这里进行数据清洗/转换# chunk['column_name'] = chunk['column_name'].str.strip()# 将块写入数据库,if_exists='append' 表示追加到现有表chunk.to_sql(name=table_name,con=engine,