Python读取excel表格并写入数据库
1、python环境要求
# python 类库要求
pip install pandas openpyxl mysql-connector-python# 高版本的xlrd,无法处理xlsx
pip install xlrd==1.2.0
2、代码
import pandas as pd
import mysql.connector# 连接到 MySQL 数据库
conn = mysql.connector.connect(host='xxx.xxx.xxx.xxx', # 数据库主机地址user='********', # 数据库用户名password='********', # 数据库密码database='test' # 目标数据库
)cursor = conn.cursor()# 读取 Excel 文件中的所有 Sheet
excel_file = '.\test.xlsx' # 需要读取的 Excel 文件路径
xls = pd.ExcelFile(excel_file)# 遍历每个 Sheet 页
for sheet_name in xls.sheet_names:# 读取当前 sheet 的数据到 DataFramedf = pd.read_excel(xls, sheet_name=sheet_name)# 假设你要插入的数据库表结构与 DataFrame 的列结构匹配# 如果表结构不同,需要进行列名映射或其他处理for index, row in df.iterrows():# 准备插入数据的 SQL 语句# 假设表名为 `your_table`,并且表结构和列名与 DataFrame 匹配sql = ""if sheet_name == "环境数据":# 开始行号# if index >= 7:sql = """INSERT INTO en_energy_supply (d_year, energy_type_c, energy_type_e, country_c, country_e, energy_reserves, energy_usage)VALUES (%s, %s, %s, %s, %s, %s, %s)"""# 因为sheet页中的列有可能不能,所以需要通过不同的sheet页列进行补充# else:# if else: sql = ""if len(sql) > 0:# 将 DataFrame 中的行转化为一个元组values = tuple(row)try:# 执行插入操作cursor.execute(sql, values)conn.commit() # 提交事务except mysql.connector.Error as err:print(f"Error: {err}")conn.rollback() # 回滚事务# 关闭连接
cursor.close()
conn.close()
3、报错问题记录
raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported
xlrd的版本不对,xlsx只能用低版本处理。