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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python标准库sched模块使用指南
Jul 06 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python输出各行命令详解
Feb 01 Python
python如何查看微信消息撤回
Nov 27 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 30 Python
python的html标准库
Apr 29 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
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
javascript 短路法代码精简
2009/08/20 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
python基于ID3思想的决策树
2018/01/03 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python3安装crypto出错及解决方法
2019/07/30 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
python怎么自定义捕获错误
2020/06/29 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
有模特经验的简历自我评价
2013/09/19 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android