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 相关文章推荐
python3 与python2 异常处理的区别与联系
Jun 19 Python
python遍历文件夹下所有excel文件
Jan 03 Python
python删除不需要的python文件方法
Apr 24 Python
Django中使用Celery的教程详解
Aug 24 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python实现诗歌游戏(类继承)
Feb 26 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 Python
python元组打包和解包过程详解
Aug 02 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闭包(Closure)使用详解
2013/05/02 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Django框架表单操作实例分析
2019/11/04 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
讲文明懂礼貌演讲稿
2014/09/11 职场文书
家长评语怎么写
2014/12/30 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Python Socket编程详解
2021/04/25 Python
Python面向对象之成员相关知识总结
2021/06/24 Python
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
mysql事务隔离级别详情
2021/10/24 MySQL
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers