解决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格式化压缩后的JS文件的方法
Mar 05 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Keras: model实现固定部分layer,训练部分layer操作
Jun 28 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python模拟键盘输入自动登录TGP
Nov 27 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
AngularJS快速入门
2015/04/02 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
python 中split 和 strip的实例详解
2017/07/12 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
对Python 数组的切片操作详解
2018/07/02 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
浅析Python __name__ 是什么
2020/07/07 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
广告学专业应届生求职信
2013/10/01 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
Java tomcat手动配置servlet详解
2021/11/27 Java/Android