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实现批量监控网站
Sep 09 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
微信跳一跳小游戏python脚本
Jan 05 Python
Python sorted函数详解(高级篇)
Sep 18 Python
Python PIL图片添加字体的例子
Aug 22 Python
Python-openCV读RGB通道图实例
Jan 17 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
python编写俄罗斯方块
Mar 13 Python
python函数map()和partial()的知识点总结
May 26 Python
通过实例解析python创建进程常用方法
Jun 19 Python
解决c++调用python中文乱码问题
Jul 29 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php在线生成ico文件的代码
2007/10/09 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
Sample script that deletes a SQL Server database
2007/06/16 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
小学中秋节活动方案
2014/02/06 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
公司承诺函范文
2015/01/21 职场文书
英文辞职信范文
2015/05/13 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
Go语言带缓冲的通道实现
2021/04/26 Golang