Python 读取千万级数据自动写入 MySQL 数据库


Posted in Python onJune 28, 2022

前言

Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到 python 操作数据库,读写更新等,数据库可能是 mongodb、 es,他们的处理思路都是相似的,只需要将操作数据库的语法更换即可。本篇文章会给大家系统的分享千万级数据如何写入到 mysql,分为两个场景,两种方式。

场景一:数据不需要频繁的写入mysql

使用 navicat 工具的导入向导功能。支持多种文件格式,可以根据文件的字段自动建表,也可以在已有表中插入数据,非常快捷方便。

Python 读取千万级数据自动写入 MySQL 数据库

Python 读取千万级数据自动写入 MySQL 数据库

场景二:数据是增量的,需要自动化并频繁写入mysql

测试数据:csv 格式 ,大约 1200万行

import pandas as pd
data = pd.read_csv('./tianchi_mobile_recommend_train_user.csv')
data.shape

打印结果:

Python 读取千万级数据自动写入 MySQL 数据库

方式一:python ➕ pymysql 库

安装 pymysql 命令:

pip install pymysql

代码实现:

import pymysql
# 数据库连接信息
conn = pymysql.connect(
       host='127.0.0.1',
       user='root',
       passwd='wangyuqing',
       db='test01',
       port = 3306,
       charset="utf8")
# 分块处理
big_size = 100000
# 分块遍历写入到 mysql
with pd.read_csv('./tianchi_mobile_recommend_train_user.csv',chunksize=big_size) as reader:
    for df in reader:
        datas = []
        print('处理:',len(df))
#         print(df)
        for i ,j in df.iterrows():
            data = (j['user_id'],j['item_id'],j['behavior_type'],
                    j['item_category'],j['time'])
            datas.append(data)
        _values = ",".join(['%s', ] * 5)
        sql = """insert into users(user_id,item_id,behavior_type
        ,item_category,time) values(%s)""" % _values
        cursor = conn.cursor()
        cursor.executemany(sql,datas)
        conn.commit()
 # 关闭服务
conn.close()
cursor.close()
print('存入成功!')

Python 读取千万级数据自动写入 MySQL 数据库

方式二:pandas ➕ sqlalchemy:pandas需要引入sqlalchemy来支持sql,在sqlalchemy的支持下,它可以实现所有常见数据库类型的查询、更新等操作。

代码实现:

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:wangyuqing@localhost:3306/test01')
data = pd.read_csv('./tianchi_mobile_recommend_train_user.csv')
data.to_sql('user02',engine,chunksize=100000,index=None)
print('存入成功!')

总结

pymysql 方法用时12分47秒,耗时还是比较长的,代码量大,而 pandas 仅需五行代码就实现了这个需求,只用了4分钟左右。最后补充下,方式一需要提前建表,方式二则不需要。所以推荐大家使用第二种方式,既方便又效率高。如果还觉得速度慢的小伙伴,可以考虑加入多进程、多线程。

最全的三种将数据存入到 MySQL 数据库方法:

  • 直接存,利用 navicat 的导入向导功能
  • Python pymysql
  • Pandas sqlalchemy

到此这篇关于Python 读取千万级数据自动写入 MySQL 数据库的文章就介绍到这了,更多相关Python 读取数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Python 相关文章推荐
python实现手机通讯录搜索功能
Feb 22 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
详解Python3中ceil()函数用法
Feb 19 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
python判断自身是否正在运行的方法
Aug 08 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
python中有关时间日期格式转换问题
Dec 25 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
python数字图像处理:图像简单滤波
Jun 28 #Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
You might like
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
JS中操作JSON总结
2020/12/06 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
python局部赋值的规则
2013/03/07 Python
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
浅谈flask源码之请求过程
2018/07/26 Python
Python中反射和描述器总结
2018/09/23 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
机电一体化自荐信
2013/12/10 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
大学生活动总结模板
2014/07/02 职场文书
2014年班主任工作总结
2014/11/08 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js