Python3批量将Excel中数据插入到mysql5.7数据库

需求:

Excel(.xlsx)中约有1000多万条数据,需要将数据插入到mysql数据库中,excel中第一个sheet页有表头,后面35个sheet页没有表头,需要将所有sheet页中的数据批量插入数据库。

实现

安装依赖:

pip install pandas
pip install openpyxl
pip install mysql-connector-python

python脚本

import pandas as pd
import mysql.connector

# 配置 MySQL 连接
def get_mysql_connection():
    return mysql.connector.connect(
        host='192.168.1.1',
        user='用户',
        password='密码',
        database='数据库',
        port= 端口号
    )
# 批量插入数据到 MySQL
def insert_data_to_mysql(df, conn, batch_size=5000):
    cursor = conn.cursor()

    # 插入 SQL 语句,假设 temp 表结构为 (cons_id, record_date, record_usage)
    insert_sql = "INSERT INTO temp11 (cons_id, record_date, record_usage) VALUES (%s, %s, %s)"
    
    # 将 DataFrame 转换为列表格式
    data = df[['OBJ_NO', 'DATE', 'VALUE']].values.tolist()  # 只提取这三列
    
    # 分批插入
    for i in range(0, len(data), batch_size):
        batch_data = data[i:i + batch_size]
        cursor.executemany(insert_sql, batch_data)  # 批量插入
        conn.commit()  # 提交事务
        print(f"批量插入了 {len(batch_data)} 条数据")


# 读取 Excel 所有 sheet 页并插入 MySQL
def insert_excel_data_to_mysql(excel_file, conn, batch_size=5000):
    # 读取 Excel 文件中所有的 sheet,返回一个字典 {sheet_name: DataFrame}
    df_dict = pd.read_excel(excel_file, sheet_name=None, engine='openpyxl')

    # 第一个 sheet 页处理(读取表头)
    first_sheet_name = list(df_dict.keys())[0]
    first_df = df_dict[first_sheet_name]
    
    # 处理后续的 sheet 页(没有表头)
    for sheet_name, df in df_dict.items():
        print(f"正在处理 sheet: {sheet_name}")
        
        # 如果是第一个 sheet,处理表头
        if sheet_name == first_sheet_name:
            df.columns = ['DATA_ID', 'OBJ_NO', 'OBJ_NAME', 'OBJ_TYPE', 'DATA_CODE', 'DATE', 'VALUE']
        
        # 处理后续 sheet(没有表头,直接为列名)
        else:
            df.columns = ['DATA_ID', 'OBJ_NO', 'OBJ_NAME', 'OBJ_TYPE', 'DATA_CODE', 'DATE', 'VALUE']

        # 提取所需的三列
        df_filtered = df[['OBJ_NO', 'DATE', 'VALUE']]

        # 插入数据到 MySQL,按批量大小进行插入
        insert_data_to_mysql(df_filtered, conn, batch_size)

# 关闭 MySQL 连接
def close_connection(conn):
    conn.close()

if __name__ == "__main__":
    # 数据库连接
    conn = get_mysql_connection()

    try:
        # 指定 Excel 文件路径
        excel_file = '/Users/xxx/datas.xlsx'
        
        # 批量大小,默认 1000 条
        batch_size = 5000
        
        # 将 Excel 数据批量插入 MySQL
        insert_excel_data_to_mysql(excel_file, conn, batch_size)
    
    finally:
        # 关闭连接
        close_connection(conn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值