解决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设计模式之观察者模式实例
Apr 26 Python
Python中subprocess模块用法实例详解
May 20 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python动态生成多维数组的方法示例
Aug 09 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 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开发的一些注意点总结
2010/10/12 PHP
php长字符串定义方法
2012/07/12 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
解析vue中的$mount
2017/12/21 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
python写一个随机点名软件的实例
2019/11/28 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
保送生自荐信范文
2013/10/06 职场文书
2013年高中生自我评价
2013/10/23 职场文书
大学生毕业自我评价范文分享
2013/11/07 职场文书
求职信范文大全
2014/05/26 职场文书
消防工作实施方案
2014/06/09 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫