iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Python将数据批量的插入到数据库
  • 350
分享到

如何用Python将数据批量的插入到数据库

2023-06-16 07:06:01 350人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家介绍如何用python将数据批量的插入到数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我是一名挣扎在编程链底端的Pythoner,工作中既要和数据打交道,也要保持和erp系统,WEB网站友好的&qu

这篇文章给大家介绍如何用python将数据批量的插入到数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

我是一名挣扎在编程链底端的Pythoner,工作中既要和数据打交道,也要保持和erp系统,WEB网站友好的"沟通"···,我会时不时的分享下工作中遇到那点事,包括个人觉得值得记录的编程小技巧,还有就是遇到的问题以及解决方案,还有源码的阅读等等,可能也有编程中的生活感悟,不说了,我要去重构我的程序了

基于python, 使用pandas,  pymysql等三方库实现了向数据库中高效批量插入数据,一方面提供被网上很多瞎转载的答案给坑蒙了的人(因为我也是),一方面自己也做个笔记,以后方便查阅

需求原因

最近在处理一个需求,有关批量往数据库插入数据的,描述如下

  • 原来的程序是基于sql的存储过程进行数据的更新修改操作,由于数据量较大,导致对数据库压力太大,于是需要将程序重构为用python读取文件的方式将数据做计算处理,减少这部分的压力,最后仅仅将计算的结果调用aws的lambda服务重新更新到数据库中就可以了,减少了极大的压力,也降低了成本。涉及数据库主要是插入及更新操作

版本库信息

  • 基于linux系统写的

  • 三方库 >>> pandas 1.0.5, pyMysql 0.9.3

  • python版本 >>> 3.7

  • 标准库 >> os

逻辑梳理

实际上,最后一步,要写入数据库的文件数据是存储在内存中的。因为读取文件后进行的计算都是在内存中进行的,那么计算的结果也没必要再写到本地,再去读取,再写入数据库,这是会影响程序的效率的。逻辑如下

  • 读取文件

  • 文件的拼接及计算,生成新的df

  • 初始化数据库的连接

  • 将df所需数据转换为元组数据(取决于数据库的三方库的接口是如何支持批量操作的)

  • 将数据写入数据库

  • 检查数据库内容即可

分步实现及分析

读取文件

给文件路径,然后去读文件就行了,强调一下需要注意的点

  • 绝对路径: 这种最简单,直接给路径字符串就行了,但是一旦文件夹目录结构变化,就需要频繁的改

  • 相对路径:  我一般喜欢先在脚本中定位当前脚本的位置,然后通过相对路径去找,这样只要你整个包内部的目录结构不变化,都不用改,就算部署上线也是直接根据包的位置来,很方便

  • pandas默认会将所有数字读取为float类型,所以对于那种看起来是数字,但实际上是需要当作字符串使用的字段进行类型的转换

import pandas as pd  import numpy as np  # 当前脚本的位置 current_folder_path = os.path.dirname(__file__)  # 你的文件的位置 your_file_path2 = os.path.join(current_folder_path, "文件的名字1") your_file_path3 = os.path.join(current_folder_path, "文件的名字2")  # 我这里是以读取csv文件为例, delimiter为我们内部约定的列之间的分割符 df1 = pd.read_csv(your_file_path2, dtype={"column1": str, "column2": str}, delimiter="/t") df2 = pd.read_csv(your_file_path3, dtype={"column1": str, "column2": str}, delimiter="/t")

文件的拼接及计算

文件的拼接主要就是merge和concat两个语法的使用,强调一下小知识点

  • merge语法主要是对应于sql语言的内连接,外连接,左连接和右连接等

  • concat主要是用来将相同结构的df单纯的拼接起来(也就是列表的总行数增加)

# 这里以左连接举例, 假设只有两个文件拼接 ret_df = pd.merge(df1, df2, left_on=["column_name"], right_on=["column_name"], how="left")

初始化连接

导入三方库pymysql,初始化连接

# pymysql的接口获取链接 def mysql_conn(host, user, passWord, db, port=3306, charset="utf8"):   # 传参版本   conn = pymysql.connect(host=host, user=user, password=password, database=db, port=port, charset=charset)   return conn

对应接口转换数据

  1. 数据插入要考虑写入一个事务,因为失败的话,要保证对数据库没有影响

  2. 构造符合对应接口的数据格式,通过查询,pymysql有两种可以执行语句的接口

  • execute(单条插入语句)

  • 执行单条语句的接口

  1. 类似这种: Insert into table_name (column) values (value);

  2. executemany(批量插入语句)

  • 执行多条语句的接口

  • 类似这种: Insert into table_name (column1, column2, column3) values (value1,  value2, value3);

具体实现如下

# 先创建cursor负责操作conn接口 conn = mysql_conn("your db host", "your username", "your password", "db name") cursor = conn.cursor() # 开启事务 conn.begin()  #############      构造批量数据的过程            #############  # 先构造需要的或是和数据库相匹配的列 columns = list(df.columns) # 可以删除不要的列或者数据库没有的列名 columns.remove("列名") # 重新构造df,用上面的columns,到这里你要保证你所有列都要准备往数据库写入了 new_df = df[columns].copy()  # 构造符合sql语句的列,因为sql语句是带有逗号分隔的,(这个对应上面的sql语句的(column1, column2, column3)) columns = ','.join(list(new_df.columns))  # 构造每个列对应的数据,对应于上面的((value1, value2, value3)) data_list = [tuple(i) for i in gdsord_df.values] # 每个元组都是一条数据,根据df行数生成多少元组数据  # 计算一行有多少value值需要用字符串占位 s_count = len(data_list[0]) * "%s,"  # 构造sql语句 insert_sql = "insert into " + "数据库表名" + " (" + columns + ") values (" + s_count[:-1] + ")"

将数据写入数据库

这个简单,直接上代码

cursor.executemany(insert_sql, data_list) conn.commit() cursor.close() conn.close()

检查数据库是否插入成功

如果没问题的话,就可以同时进行多个文件读写,计算,最后启用多线程同时向数据库中写入数据了,非常高效!

完整代码

import pandas as pd  import numpy as np   # pymysql接口 def mysql_conn(host, user, password, db, port=3306, charset="utf8"):   conn = pymysql.connect(host=host, user=user, password=password, database=db, port=port, charset=charset)   return conn   # 当前脚本的位置 current_folder_path = os.path.dirname(__file__)  # 你的文件的位置 your_file_path2 = os.path.join(current_folder_path, "文件的名字1") your_file_path3 = os.path.join(current_folder_path, "文件的名字2")  # 我这里是以读取csv文件为例, delimiter为我们内部约定的列之间的分割符 df1 = pd.read_csv(your_file_path2, dtype={"column1": str, "column2": str}, delimiter="/t") df2 = pd.read_csv(your_file_path3, dtype={"column1": str, "column2": str}, delimiter="/t") # 合并 ret_df = pd.merge(df1, df2, left_on=["column_name"], right_on=["column_name"], how="left")  # 先创建cursor负责操作conn接口 conn = mysql_conn("your db host", "your username", "your password", "db name") cursor = conn.cursor() # 开启事务 conn.begin()  # 先构造需要的或是和数据库相匹配的列 columns = list(df.columns) # 可以删除不要的列或者数据库没有的列名 columns.remove("列名") # 重新构造df,用上面的columns,到这里你要保证你所有列都要准备往数据库写入了 new_df = df[columns].copy()  # 构造符合sql语句的列,因为sql语句是带有逗号分隔的,(这个对应上面的sql语句的(column1, column2, column3)) columns = ','.join(list(new_df.columns))  # 构造每个列对应的数据,对应于上面的((value1, value2, value3)) data_list = [tuple(i) for i in gdsord_df.values] # 每个元组都是一条数据,根据df行数生成多少元组数据  # 计算一行有多少value值需要用字符串占位 s_count = len(data_list[0]) * "%s,"  # 构造sql语句 insert_sql = "insert into " + "数据库表名" + " (" + columns + ") values (" + s_count[:-1] + ")" try:   cursor.executemany(insert_sql, data_list)   conn.commit()   cursor.close()   conn.close() except Exception as e:   # 万一失败了,要进行回滚操作   conn.rollback()   cursor.close()   conn.close()

关于如何用Python将数据批量的插入到数据库就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何用Python将数据批量的插入到数据库

本文链接: https://www.lsjlt.com/news/282721.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用Python将数据批量的插入到数据库
    这篇文章给大家介绍如何用Python将数据批量的插入到数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我是一名挣扎在编程链底端的pythoner,工作中既要和数据打交道,也要保持和erp系统,web网站友好的&qu...
    99+
    2023-06-16
  • python批量插入数据到mysql
    使用python批量插入数据到mysql的三种方法 自动化单条insert # -*- coding:utf-8 -*-import timefrom pymysql import *# 装饰器,计算插入50000条数据需要的时间def t...
    99+
    2023-09-06
    mysql 数据库 sql
  • 如何将批量数据导入mysql数据库
    这篇文章将为大家详细讲解有关如何将批量数据导入mysql数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何将批量数据导入mysql数据库1.创建一个e...
    99+
    2024-04-02
  • SpringBootMybatis批量插入Oracle数据库数据
    目录前端数据数据表结构后端Controller:mapperxml前端数据 有如下需求,前端提交一个对象cabinData,保存到数据表中,对象结构如下:  {      "ship...
    99+
    2024-04-02
  • Android应用中如何将数据插入到SQLite数据库
    Android应用中如何将数据插入到SQLite数据库?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、使用db.execSQL(sql)这里是把要插入的数据拼接成可执行的sq...
    99+
    2023-05-31
    android sqlite lite
  • 数据库中怎么批量插入数据
    本文小编为大家详细介绍“数据库中怎么批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“数据库中怎么批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。批量插入批量插入使用 execute...
    99+
    2023-06-08
  • sqlite如何批量插入数据
    在SQLite中,可以使用INSERT INTO语句以及UNION ALL语法来批量插入数据。以下是一个示例代码: INSE...
    99+
    2024-04-10
    sqlite
  • 数据库批量插入数据的三种方法
    一、准备工作 测试环境:SpringBoot项目+MybatisPlus框架+MySQL数据库+Lombok 二、导入依赖 org.springframework.boot spring-...
    99+
    2023-08-20
    mysql mybatis spring boot
  • MyBatis如何批量插入大量数据
    这篇文章将为大家详细讲解有关MyBatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa...
    99+
    2023-06-22
  • SQL批量插入数据
    MS SQL Server数据库批量插入数据的sql语句总结:第一种:insert into tb_NameList(Name,InsertDate,UpdateDate)values('aa',GETDA...
    99+
    2024-04-02
  • java 批量插入数据
    批量插入数据,常见的使用mybatis foreach 插入的方式,原始的方式和批处理 1,常见的mybatis foreach xml insert into CODEINFO (CODE_TYPE, CODE, MEAN, STAT...
    99+
    2023-09-03
    mybatis mysql 批量插入
  • python向mySQL批量插入数据的方
    通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理。 今天用这个函数完成了批量插入 例程: def test_insertDB():     conn = database.Connect...
    99+
    2023-01-31
    批量 数据 python
  • Python将数据库数据导入到EXCEL
          每次给运营导数据的时候,如果不用工具的话,就是直接生成.csv格式的文件,这样的文件不支持'sheet',每次还有手工进行,相当的不科学,今天试试Python生成excel文件。        写的糙了点,但是这是一个很好的开始...
    99+
    2023-01-31
    导入到 数据库 数据
  • 使用java怎么向mysql数据库批量插入数据
    今天就跟大家聊聊有关使用java怎么向mysql数据库批量插入数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • MyBatis如何实现批量插入数据
    本文小编为大家详细介绍“MyBatis如何实现批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis如何实现批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、SQL实现示例假设我们...
    99+
    2023-07-04
  • .NET多种数据库大数据批量插入分析
    本篇内容介绍了“.NET多种数据库大数据批量插入分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能介绍 (需要版本5.0.45)大数据操...
    99+
    2023-06-25
  • 利用MyBatis怎么将数据插入到Oracle数据库中
    这篇文章将为大家详细讲解有关利用MyBatis怎么将数据插入到Oracle数据库中,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、mybatis批量插入数据到Oracle中的两种方式:第一...
    99+
    2023-05-31
    mybatis oracle
  • python数据怎么批量写入数据库
    在Python中,可以使用循环和SQL语句将数据批量写入数据库。以下是一个示例,展示了如何使用Python的`sqlite3`模块将...
    99+
    2023-10-11
    python 数据库
  • MySql批量插入时如何不重复插入数据
    目录前言一、insert ignore into二、on duplicate key update三、replace into总结前言 Mysql插入不重复的数据,当大数据量的数据需...
    99+
    2024-04-02
  • 如何利用MySqlBulkLoader实现批量插入数据
    这篇文章主要介绍“如何利用MySqlBulkLoader实现批量插入数据”,在日常操作中,相信很多人在如何利用MySqlBulkLoader实现批量插入数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何利...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作