解决python读取几千万行的大表内存问题


Posted in Python onJune 26, 2018

Python导数据的时候,需要在一个大表上读取很大的结果集。

如果用传统的方法,Python的内存会爆掉,传统的读取方式默认在内存里缓存下所有行然后再处理,内存容易溢出

解决的方法:

1)使用SSCursor(流式游标),避免客户端占用大量内存。(这个cursor实际上没有缓存下来任何数据,它不会读取所有所有到内存中,它的做法是从储存块中读取记录,并且一条一条返回给你。)

2)使用迭代器而不用fetchall,即省内存又能很快拿到数据。

import MySQLdb.cursors

conn = MySQLdb.connect(host='ip地址', user='用户名', passwd='密码', db='数据库名', port=3306,
   charset='utf8', cursorclass = MySQLdb.cursors.SSCursor)
cur = conn.cursor()
cur.execute("SELECT * FROM bigtable");
row = cur.fetchone()
while row is not None:
 do something
 row = cur.fetchone()

cur.close()
conn.close()

需要注意的是,

1、因为SSCursor是没有缓存的游标,结果集只要没取完,这个conn是不能再处理别的sql,包括另外生成一个cursor也不行的。

如果需要干别的,请另外再生成一个连接对象。

2、 每次读取后处理数据要快,不能超过60s,否则mysql将会断开这次连接,也可以修改 SET NET_WRITE_TIMEOUT = xx 来增加超时间隔。

以上这篇解决python读取几千万行的大表内存问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
Python中的rfind()方法使用详解
May 19 Python
python daemon守护进程实现
Aug 27 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
keras 权重保存和权重载入方式
May 21 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
python中的unittest框架实例详解
Feb 05 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
python简单验证码识别的实现过程
Jun 20 Python
详解Python3的TFTP文件传输
Jun 26 #Python
python3爬取数据至mysql的方法
Jun 26 #Python
python清除函数占用的内存方法
Jun 25 #Python
Python IDLE清空窗口的实例
Jun 25 #Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 #Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 #Python
Python代码块批量添加Tab缩进的方法
Jun 25 #Python
You might like
PHP学习之数组的定义和填充
2011/04/17 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python爬虫爬取网页表格数据
2018/03/07 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Python中字符串List按照长度排序
2019/07/01 Python
python-地图可视化组件folium的操作
2020/12/14 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
农药学硕士毕业生自荐信
2013/09/25 职场文书
销售团队口号大全
2014/06/06 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL