【工具封装】不用 for 循环, 教你如何向MySQL数据库批量插入数据

19 篇文章 0 订阅
9 篇文章 0 订阅

一、前言

今天教你 不用 for 循环,如何向 MySQL 数据库 批量插入数据

废话不多说,直接看步骤实现 。。。

好文章 记得收藏+点赞+关注额 !!!

---- Nick.Peng


二、封装执行SQL方法

import json
from pymysql import *

def exec_sql(db_name, sql):
    """
    封装sql执行方法
    :param db_name: 操作的数据库名字
    :param sql: 要执行的sql语句
    :return:
	"""
    conn = connect(host="127.0.0.1",
                   port=3306,
                   user="root",
                   password="root",
                   database=db_name)
    conn.autocommit(1)
    cs = conn.cursor()
    count = cs.execute(sql)
    conn.commit()
    cs.close()
    conn.close()


三、封装插入数据方法

import re

def save_analysis_data(count, *analysis_data):
    """
    拼接SQL并插入分析数据
    :param count: 当前表字段的个数
    :param analysis_data: 要插入的分析数据
    :return:
    """
    space = re.sub('}{', '},{', '{}' * count)
    # 自动拼接 批量数据插入 SQL语句
    sql = f"""INSERT INTO table_name (字段1, 字段2, 字段3, 字段4, 字段5, 字段6) VALUES {space}""".format(*analysis_data)
    print("SQL语句:", sql)
    # 执行SQL插入操作
    app_db.exec_sql(db_name, sql)
    # SQL拼接示例:
    """
    INSERT INTO table_name ( 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, 字段 6 )
    VALUES
        ( 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, 字段 6 ),
        ( 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, 字段 6 ),
        ( 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, 字段 6 ),
        ( 字段 1, 字段 2, 字段 3, 字段 4, 字段 5, 字段 6 )
    """


四、案例演示

# 以下是准备插入数据库的数据(要插入表的字段个数:这里假设有6个)
list1 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段1 的列表
list2 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段2 的列表
list3 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段3 的列表
list4 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段4 的列表
list5 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段5 的列表
list6 = ['元素1', '元素2', '元素2', '元素3', '元素4', '元素5', '元素6', '元素7'......]  # 字段6 的列表
list6 = json.dumps(list6, ensure_ascii=False)     # 如果某个字段为JSON类型,需要提前转换

# 将数据集中打包成一个元组列表
analysis_data = zip(list1, list2, list3, list4, list5, list6)

# 调用插入数据方法
save_analysis_data(len(list1), *analysis_data)

​​

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
线程池可以用来优化向数据库批量插入数据的性能。以下是一种简单的实现方式: 1. 创建一个线程池,线程池的大小根据你的机器性能和数据库负载情况来配置。 2. 将需要插入数据按照一定的规则划分成多个小批次。 3. 创建一个任务队列,将每个小批次的数据封装成一个任务,并放入任务队列中。 4. 线程池中的每个线程从任务队列中取出一个任务,执行该任务中的插入操作。 5. 执行完任务后,线程将结果返回给主线程,并继续从任务队列中取出下一个任务执行。 6. 主线程等待所有任务执行完毕后,关闭线程池。 以下是一个简单的Java代码示例: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class DatabaseInsertThreadPool { private ExecutorService executorService; public DatabaseInsertThreadPool(int poolSize) { executorService = Executors.newFixedThreadPool(poolSize); } public void insertDataToDatabase(Data data) { // 将数据按照一定的规则划分成多个小批次 List<List<Data>> dataBatches = splitDataIntoBatches(data); // 将每个小批次的数据封装成一个任务,并放入任务队列中 for (List<Data> dataBatch : dataBatches) { executorService.submit(() -> { // 执行该任务中的插入操作 insertDataBatchToDatabase(dataBatch); }); } } public void shutdown() { executorService.shutdown(); } private List<List<Data>> splitDataIntoBatches(Data data) { // 将数据按照一定的规则划分成多个小批次 ... } private void insertDataBatchToDatabase(List<Data> dataBatch) { // 将数据批量插入数据库中 ... } } ``` 你可以根据自己的具体需求来修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值