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 相关文章推荐
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
python自动化报告的输出用例详解
May 30 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
python调用百度语音REST API
Aug 30 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
python tkinter组件摆放方式详解
Sep 16 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
Django重设Admin密码过程解析
Feb 10 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
使用TensorBoard进行超参数优化的实现
Jul 06 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 静态页面中显示动态内容
2009/08/14 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
php异常处理方法实例汇总
2015/06/24 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Python、Javascript中的闭包比较
2015/02/04 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
学python安装的软件总结
2019/10/12 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
AJAX的全称是什么
2012/11/06 面试题
城市轨道专业个人求职信范文
2013/09/23 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
保安队长职务说明书
2014/02/23 职场文书
法人任命书范本
2014/06/04 职场文书
晚会开幕词
2015/01/28 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
婚礼家长致辞
2015/07/27 职场文书
升学宴家长答谢词
2015/09/29 职场文书
Golang的继承模拟实例
2021/06/30 Golang
SQL Server代理:理解SQL代理错误日志处理方法
2021/06/30 SQL Server