解决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中Django发送带图片和附件的邮件
Mar 31 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
CentOS7安装Python3的教程详解
Apr 10 Python
Python比较配置文件的方法实例详解
Jun 06 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
python 两个数据库postgresql对比
Oct 21 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 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中Cookie与Session的异同
2016/02/19 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
python比较2个xml内容的方法
2015/05/11 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
解读! Python在人工智能中的作用
2017/11/14 Python
Python实现调度算法代码详解
2017/12/01 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
Python封装原理与实现方法详解
2018/08/28 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
Python 中@property的用法详解
2020/01/15 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Python接口开发实现步骤详解
2020/04/26 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python设置表格边框的具体方法
2020/07/17 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
简历的个人自我评价范文
2014/01/03 职场文书
2014年教研室工作总结
2014/12/06 职场文书
党支部综合考察意见
2015/06/01 职场文书
学习十八大的感悟
2015/08/11 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python