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的ORM框架SQLObject入门实例
Apr 28 Python
简单介绍Python中的floor()方法
May 15 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
在python shell中运行python文件的实现
Dec 21 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
Python如何在单元测试中给对象打补丁
Aug 03 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格式化电话号码的方法
2015/04/24 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
解决python多行注释引发缩进错误的问题
2019/08/23 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python属于跨平台语言码
2020/06/09 Python
pytorch中index_select()的用法详解
2021/01/06 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
给老婆的婚前保证书
2014/02/01 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
2014年德育工作总结
2014/11/20 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL