解决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 从远程服务器下载东西的代码
Feb 10 Python
python计算圆周长、面积、球体体积并画出圆
Apr 08 Python
Python实现抓取网页并且解析的实例
Sep 20 Python
PyQt5每天必学之组合框
Apr 20 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
sklearn+python:线性回归案例
Feb 24 Python
django 解决扩展自带User表遇到的问题
May 14 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
利用javascript查看html源文件
2006/11/08 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
JS之相等操作符详解
2016/09/13 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
原生js 实现表单验证功能
2021/02/08 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python实现复制文件到指定目录
2019/10/16 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
python实现人像动漫化的示例代码
2020/05/17 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
岗位职责怎么写
2014/03/14 职场文书
党员一帮一活动总结
2014/07/08 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
通讯稿范文
2015/07/22 职场文书
党组织结对共建协议书
2016/03/23 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
php双向队列实例讲解
2021/11/17 PHP
Golang gRPC HTTP协议转换示例
2022/06/16 Golang