python高效处理大数据:将Excel10万数据分批插入MySQL数据库的实战代码

news2024/11/14 12:57:57

将一个包含10万行数据的Excel文件批量插入到MySQL数据库中,可以按照以下步骤进行。我们将使用 pandas 读取Excel文件,并使用 mysql.connector 来连接和插入数据到MySQL数据库。同时,我们会采用分批插入的方式来处理大量数据,以优化性能和内存使用。

一、导入库

import pandas as pd
import mysql.connector
from mysql.connector import Error
from openpyxl import load_workbook
from itertools import islice  # 导入 islice 用于高效地读取Excel文件的块

二、创建与MySQL数据库的连接

# 创建与MySQL数据库的连接
def create_connection(host, user, password, database):
    """
    创建与MySQL数据库的连接
    :param host: 数据库主机地址
    :param user: 数据库用户名
    :param password: 数据库密码
    :param database: 数据库名
    :return: 数据库连接对象
    """
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host,
            user=user,
            password=password,
            database=database
        )
        print("Connection to MySQL DB successful")
    except Error as e:
        print(f"The error '{e}' occurred")
    return connection

三、 执行批量插入操作

# 执行批量插入操作
def execute_batch_insert(connection, query, data, batch_size=1000):
    """
    执行批量插入操作
    :param connection: 数据库连接对象
    :param query: 插入数据库的SQL查询
    :param data: 要插入的数据,为列表的元组
    :param batch_size: 每次批量插入的数量,默认为1000
    """
    cursor = connection.cursor()
    try:
        for i in range(0, len(data), batch_size):
            batch = data[i:i + batch_size]
            cursor.executemany(query, batch)
            connection.commit()
        print("Batch insert completed successfully")
    except Error as e:
        print(f"The error '{e}' occurred")
        connection.rollback()  # 如果发生错误,则回滚事务
    finally:
        cursor.close()

四、 逐块读取Excel文件

# 逐块读取Excel文件
def read_excel_in_chunks(file_path, chunk_size=5000):
    """
    逐块读取Excel文件
    :param file_path: Excel文件路径
    :param chunk_size: 每块的行数,默认为5000
    :return: 生成器,产生包含Excel数据的DataFrame块
    """
    wb = load_workbook(filename=file_path, read_only=True)
    ws = wb.active
    rows = ws.iter_rows(values_only=True)
    headers = next(rows)  # 假设第一行为标题行

    while True:
        chunk = list(islice(rows, chunk_size))
        if not chunk:
            break
        yield pd.DataFrame(chunk, columns=headers)

五、数据库配置执行操作

# 数据库配置
db_config = {
    'host': 'localhost',  # 数据库主机
    'user': 'bigdata',  # 数据库用户名
    'password': 'ydWi3RJMw4XSjzfc',  # 数据库密码
    'database': 'bigdata'  # 数据库名
}

# Excel文件路径
excel_file_path = 'template.xlsx'

# 创建数据库连接
connection = create_connection(**db_config)

if connection is not None:
    # SQL插入语句
    insert_poi_query = """
    INSERT INTO po_poi (poi_name, poi_address, poi_lng, poi_lat)
    VALUES (%s, %s, %s, %s)
    """

    # 分批读取Excel数据
    for chunk_df in read_excel_in_chunks(excel_file_path, chunk_size=5000):
        # 将DataFrame转换为列表元组
        values = [tuple(x) for x in chunk_df.to_numpy()]

        # 执行批量插入
        execute_batch_insert(connection, insert_poi_query, values)

    # 关闭数据库连接
    connection.close()
else:
    print("Failed to connect to the database, cannot proceed with the operation.")

注意事项

  • 表结构: 确保目标表 your_table 已经存在,并且包含 poi_name, poi_address, poi_lng,
    poi_lat, insert_time 字段。
  • 权限: 确保数据库用户具有足够的权限来执行插入操作。
  • 性能:根据你的系统资源,可能需要调整 chunk_size 和 batch_size 的值,以达到最佳性能。
  • 错误处理:上述代码提供了基本的错误处理,但在生产环境中,需要更详细的日志记录和错误处理机制。

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞书 富文本(Markdown)

飞书机器人webhook支持Markdown格式,包括表格 表格 |Syntax | Description |\n|-------- | -------- |\n|Header | Title |\n|Paragraph | Text |参考 富文本(Markdown)

jmeter常用配置元件介绍总结之用linux服务器压测

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之用linux服务器压测 1.编写测试脚本2.执行测试脚本 1.编写测试脚本 在linux服务器上进行压测,由于是没有界面的,因此我们可以先在界面上把压测脚本写好: 如图:我这里简单的写…

记录日志中logback和log4j2不能共存的问题

本文章记录设置两个日志时候,控制台直接报错 标黄处就是错误原因:1. SLF4J(W):类路径包含多个SLF4J提供程序。 SLF4J(W):找到提供程序[org.apache.logging.slf4j. net]。 SLF4J(W):找到提供程序[ch.qos.log .classi…

丹摩征文活动 |通过Pycharm复现命名实体识别模型--MECT模型

文章目录 🍋1 引言🍋2 平台优势🍋3 丹摩平台服务器配置教程🍋4 实操案例( MECT4CNER-main)🍋4.1 MECT4CNER-main模型🍋4.2 环境配置🍋4.3 训练模型🍋4.4 数据…

电脑浏览器打不开网页怎么办 浏览器无法访问网页解决方法

我们在使用电脑的时候,使用浏览器是经常的,很多用户在点开浏览器时,却遇到浏览器无法访问网页的情况。那么电脑浏览器打不开网页是什么原因呢?今天小编就给大家分享几个常见的原因和具体的解决方法,希望能对大家有所帮…

YOLOv11实战宠物狗分类

本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的特征提取能力,在多个图像分类任务中展现出卓越性能。本研究针对5种宠物狗数据集进行训练和优化,该数据集包含丰富的宠物狗图像样本…

Struts源码阅读——三个常用的辅助类DispatchAction

Struts源码阅读——三个常用的辅助类 紧接前文,我们来阅读org.apache.struts.actions包中三个常用类的源码。 DispatchAction、LookupDispatchAction 和 MappingDispatchAction 是 Struts 1 框架中的三个常用的辅助类,用来简化 Action 类中的请求分发。…

Linux设置Nginx开机启动

操作系统环境:CentOS 7 【需要 root 权限,使用 root 用户进行操作】 原理:利用 systemctl 管理服务 设置 Nginx 开机启动 需要 root 权限,普通用户使用 sudo 进行命令操作 原理:利用 systemctl 管理服务 1、新建…

C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中

效果&#xff1a; 代码实现 前端 <DataGrid x:Name"DataGrid1"<!--定义当列位置变化后的触发事件-->CanUserReorderColumns"True"ColumnReordered"DataGrid_ColumnReordered"rubyer:ControlHelper.FocusedForegroundBrush"{Stati…

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测 目录 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 吐血售&#xff01;聚划算&#xff01;Transforme…

面试官:如何设计一个能够支持高并发的系统?

强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 设计一个支持高并发的系统是一个系统工程&#xff0c;涉及多个层面的优化。以下逐一展开说明&#xff1a; 1. 分布式架…

企业数字化转型指南:如何通过价值流推动业务创新与变革

在全球企业加速数字化转型的浪潮中&#xff0c;企业领导者和技术人员必须理解数字化转型的核心不只是技术的应用&#xff0c;而是业务流程的彻底重塑。根据《价值流&#xff08;Value Streams&#xff09;》中的理论框架&#xff0c;数字化转型的关键在于价值流&#xff08;Val…

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中&#xff0c;知识库管理系统&#xff08;KBMS&#xff09;已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性&#xff0c;以及如何快速搭建企业知识库。 知识库管理系统是什么&#xff1f; 知识库管理系统…

Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图

目录 数据可视化1.使用 matplotlib 库matplotlib 库 2 .使用 seaborn 库seaborn 库 3 .使用 pyecharts库pyecharts库 注意1. 确保安装了所有必要的库2. 检查Jupyter Notebook的版本3. 使用render()方法保存为HTML文件4. 使用IFrame在Notebook中显示HTML文件5. 检查是否有其他输…

JAVA学习日记(十五) 数据结构

一、数据结构概述 数据结构是计算机底层存储、组织数据的方式。 数据结构是指数据相互之间以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择。 二、常见的数据结构 &#xff08;一&#xff09;栈 特点&…

【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”

文章目录 1.vector的介绍和使用1.1vector的介绍1.2 vector的特点1.3vector的使用1.3.1vector的定义1.3.2vector iterator的使用1.3.3vector 的空间增长问题1.3.4 vector 的增删查改1.3.5vector 迭代器失效问题 1.vector的介绍和使用 1.1vector的介绍 vector是一个顺序容器&am…

PTE-中间件安全

DOCKER环境&#xff0c;一般是80 8080 8081端口 1 apache位置扩展名解析漏洞 cd vulhub-master/httpd/apache_parsing_vulnerability/ docker-compose up -d 修改一句话的后缀 直接上传 蚁剑 2 CVE-2017-15715 docker-compose stop cd .. cd CVE-2017-15715/ dock…

Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化

全文链接&#xff1a;https://tecdat.cn/?p38224 分析师&#xff1a;Duqiao Han 股票市场是一个复杂的非线性系统&#xff0c;股价受到许多经济和社会因素的影响。因此&#xff0c;传统的线性或近线性预测模型很难有效、准确地预测股票指数的价格趋势。众所周知&#xff0c;深…

【Revit二次开发】创建Ribbon选项卡与带图标的按钮

效果图 创建一个叫做“开发的插件”的选项卡&#xff0c; 选项卡内有一个叫做“Hello”的图标按钮&#xff0c; 点击按钮后运行一个命令&#xff0c; 该命令弹出提示框“Hello Revit!”。 在此示例基础上&#xff0c;可以根据需要替换图标、文字、命令功能。 步骤 安装Revit…

Java面试要点18 - Java运行时多态与编译时多态

本文目录 一、引言二、运行时多态的实现三、编译时多态的实现四、多态与接口五、多态的实际应用六、总结 一、引言 多态是面向对象编程的三大特性之一&#xff0c;它允许我们以统一的方式处理不同类型的对象。Java中的多态分为两种&#xff1a;编译时多态&#xff08;重载&…