核心步骤
-
数据提取
- Excel文件:使用Python的
pandas
库或数据库工具(如Navicat)直接读取。import pandas as pd df = pd.read_excel("data.xlsx") # 读取Excel
- CSV文件:
df = pd.read_csv("data.csv", encoding="utf-8") # 处理中文需指定编码
- Excel文件:使用Python的
-
数据清洗(关键步骤)
- 处理空值:
df.fillna("N/A")
或用默认值替换。 - 格式化日期:
df['date'] = pd.to_datetime(df['date'])
。 - 删除重复项:
df.drop_duplicates()
。 - 验证数据类型:确保数字列无文本字符(如
$100
需转为100
)。
- 处理空值:
-
数据库表设计
- 创建与文件列匹配的表结构。
CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT, salary DECIMAL(10,2), join_date DATE );
- 创建与文件列匹配的表结构。
-
字段映射
- 确保文件列名与数据库字段名一致(如文件列
员工姓名
映射到name
)。 - 处理不匹配情况:
- 重命名列:
df.rename(columns={"员工姓名": "name"})
- 删除多余列:
df.drop(columns=["无用列"])
- 重命名列:
- 确保文件列名与数据库字段名一致(如文件列
-
导入数据库
- 方法1:用Python库(推荐)
from sqlalchemy import create_engine # 连接MySQL示例 engine = create_engine("mysql+pymysql://user:password@localhost/db_name") df.to_sql("employees", engine, if_exists="append", index=False) # 追加数据
- 方法2:数据库工具导入
- MySQL:用
LOAD DATA INFILE
命令快速导入CSV。LOAD DATA INFILE '/path/data.csv' INTO TABLE employees FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 ROWS; # 跳过CSV标题行
- Navicat/phpMyAdmin:图形化导入向导(支持Excel/CSV)。
- MySQL:用
- 方法1:用Python库(推荐)
注意事项
-
编码问题
文件与数据库需统一编码(推荐UTF-8),避免中文乱码。
-
事务处理
- 批量导入时启用事务,出错可回滚:
with engine.begin() as conn: # SQLAlchemy自动事务 df.to_sql(..., con=conn)
- 批量导入时启用事务,出错可回滚:
-
性能优化
- 大型文件(>100MB)分批导入:
for chunk in pd.read_csv("large.csv", chunksize=10000): chunk.to_sql(...) # 每次导入1万行
- 大型文件(>100MB)分批导入:
-
错误处理
- 捕获异常并记录失败数据:
try: df.to_sql(...) except Exception as e: print(f"导入失败:{e}") df.to_csv("error_rows.csv") # 保存错误数据
- 捕获异常并记录失败数据:
安全与规范
- 数据脱敏:导入前移除身份证、手机号等敏感信息。
- 权限控制:数据库账号仅授予必要权限(如只允许INSERT)。
- 备份机制:操作前备份数据库(
mysqldump -u root -p db_name > backup.sql
)。
常见问题解决
- 日期格式报错:用
pd.to_datetime()
统一格式。 - 主键冲突:导入前检查重复ID,或用
REPLACE
代替INSERT
。 - 字段长度超限:截断字符串(如
df['name'] = df['name'].str[:50]
)。
通过工具或代码实现文件表格入库,核心在于数据清洗和字段映射,优先选择编程方法(Python)处理复杂逻辑,小规模数据可用Navicat等工具提升效率,务必在操作前备份数据,并验证导入结果的完整性。
引用说明:本文方法参考自pandas官方文档、MySQL LOAD DATA语法,工具推荐Navicat、DBeaver或开源库SQLAlchemy。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/35355.html