excel 数据库(Python自动化比对Excel与数据库数据差异)

excel 数据库(Python自动化比对Excel与数据库数据差异)
Python自动化比对Excel与数据库数据差异

做数据核对时,是不是总需要在Excel和数据库之间反复切换?比如把“Excel客户表”和数据库中的客户信息比对,检查是否有新增、修改或遗漏的记录。手动逐条核对ID、姓名、联系方式,眼睛都看花了,还容易因为输入误差导致错漏。别让跨平台核对成为负担,Python能帮你自动比对Excel与数据库数据,精准标记差异,让数据校验高效又可靠!


1. 代码拆解:


python


import pandas as pd

import pymysql # 以MySQL为例,其他数据库需替换对应库

# 读取Excel数据(含“客户ID”“姓名”“电话”列)

excel_df = pd.read_excel('客户信息表.xlsx')

# 连接数据库并查询数据

db = pymysql.connect(

host='localhost',

user='用户名',

excel 数据库(Python自动化比对Excel与数据库数据差异)

password='密码',

database='客户数据库'

)

query = "SELECT 客户ID, 姓名, 电话 FROM 客户表"

db_df = pd.read_sql(query, db)

db.close()

# 按“客户ID”比对,添加来源标记

excel_df['来源'] = 'Excel'

db_df['来源'] = '数据库'

# 合并数据并筛选差异

merged = pd.merge(excel_df, db_df, on='客户ID', how='outer', suffixes=('_Excel', '_数据库'), indicator=True)

# 标记不同类型的差异

diff_results = []

for _, row in merged.iterrows():

if row['_merge'] == 'left_only':

diff_results.append({'客户ID': row['客户ID'], '差异类型': '仅Excel存在', '详情': ''})

elif row['_merge'] == 'right_only':

diff_results.append({'客户ID': row['客户ID'], '差异类型': '仅数据库存在', '详情': ''})

else:

# 检查字段是否不一致

if row['姓名_Excel'] != row['姓名_数据库']:

diff_results.append({

'客户ID': row['客户ID'],

'差异类型': '姓名不一致',

'详情': f'Excel:{row["姓名_Excel"]} vs 数据库:{row["姓名_数据库"]}'

})

if str(row['电话_Excel']) != str(row['电话_数据库']): # 转为字符串避免类型差异

diff_results.append({

'客户ID': row['客户ID'],

'差异类型': '电话不一致',

'详情': f'Excel:{row["电话_Excel"]} vs 数据库:{row["电话_数据库"]}'

})

# 保存差异结果

pd.DataFrame(diff_results).to_excel('数据差异核对表.xlsx', index=False)


首先,用pandas读取Excel中的客户信息,通过pymysql连接数据库并查询对应表的数据(以MySQL为例,其他数据库可替换为psycopg2等库)。按“客户ID”这一唯一标识合并两表,标记“仅Excel存在”“仅数据库存在”的记录;对两边都存在的记录,逐一比对“姓名”“电话”等字段,记录不一致的详情。最后将所有差异整理成Excel,清晰呈现哪里有问题,无需手动在两个平台间切换核对。


2. 场景应用:


- 场景:周三财务核对“Excel报销表”与数据库的“费用记录”,比对“报销单号”“金额”“部门”,快速发现Excel多报、漏报或金额不符的记录,确保数据一致;

- 场景:电商运营核对“Excel库存表”与数据库的“商品库存”,标记“仅Excel有库存但数据库为0”的商品,避免超卖风险;

- 场景:HR核对“Excel员工表”与人事数据库信息,检查“入职日期”“岗位”是否一致,确保员工信息在两个系统同步更新。


3. 避坑指南:


- 连接失败:数据库地址、账号密码错误会导致连接失败,需检查配置(如host是否为“localhost”或IP,端口是否正确);

- 字段类型差异:Excel中的“电话”可能是数字,数据库中是字符串,直接比对会判定为差异,需统一转为字符串(str());

- 大数据量卡顿:超过10万行数据时,merge操作可能变慢,可先按“客户ID”去重(drop_duplicates),或分批处理数据。

#办公自动化 #Excel数据库比对 #Python数据校验 #周三高效核对


文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有