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中文编码那些事
Jun 25 Python
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
Python set集合类型操作总结
Nov 07 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
Python的SQLAlchemy框架使用入门
Apr 29 Python
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
Python3如何使用多线程升程序运行速度
Aug 11 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
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
Python pickle模块用法实例分析
2015/05/27 Python
Python selenium如何设置等待时间
2016/09/15 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
使用python爬取B站千万级数据
2018/06/08 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
python 实现两个线程交替执行
2020/05/02 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
经济信息系毕业生自荐信
2014/06/02 职场文书
销售人才自我评价范文
2014/09/27 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
联村联户简报
2015/07/21 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书