`
tcspecial
  • 浏览: 906470 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysqldb查询大量数据

阅读更多

 

最近线上遇到一个问题,python定时任务运行到一半时就因为OOM被kill退出。

程序主要是利用MySQLdb插件导出db流水数据,流水数据比较大,有430w条记录,因此分多次加载数据。

db = MySQLdb.connect(host, user, pwd, db, port)
curs = db.cursor()

# 由于数据较大,不能通过fetchall()一次性读取
rec = curs.fetchone()
while rec:
	print rec
	rec = curs.fetchone()

  

但是做了上述优化后,脚本仍然会因为OOM被kill。gdb调试发现程序在不停的读数据,不是应该通过cursor每次一条条读取吗?

MySQLdb提供了四种游标:

  • Cursor/DictCursor  默认Cursor,将结果存储成Tuple; 两者都是将数据缓存到Client侧,然后从内存中fetch。
  • SSCursor/SSDictCursor 实现在Server端存储数据,fetchone()时从服务端获取一条记录。

 

db = MySQLdb.connect(host, user, pwd, db, port, 
	            cursorclass=MySQLdb.cursors.SSCursor)
curs = db.cursor()

 

 

 

 

 

 

分享到:
评论

相关推荐

    MySQLdb 1.2.4b4 documentation

    MySQLdb是基于`mysql-connector-python`和`Python C API`构建的,它的主要功能是将Python的数据类型转换为MySQL可以理解的形式,同时将MySQL的查询结果转化为Python对象。这样,Python程序员可以使用熟悉的Python...

    PyPI 官网下载 | mysqldb-rich-2.7.tar.gz

    在Python编程中,数据库的交互是不可或缺的一部分,特别是对于处理大量数据或构建Web应用程序时。PyPI(Python Package Index)作为Python软件包的官方仓库,提供了众多用于数据库操作的库。本文将深入探讨PyPI官网...

    python的64位和32位mysqldb库

    如果你的项目需要处理大量数据或者对内存有高要求,那么64位Python是更好的选择。然而,确保你的操作系统、Python解释器和所有依赖库(包括mysqldb)都匹配同一架构,否则可能会出现兼容性问题。 在Python中安装...

    课题-Python-MySQLdb-学习总结.docx

    需要注意的是,`executemany`处理大量数据时可能会导致服务器缓冲区溢出。 **6. 事务管理** - 如果使用的存储引擎支持事务,则每次数据操作后必须调用`commit`方法才能真正将更改写入数据库。`rollback`方法可用于...

    Python从数据库读取大量数据批量写入文件的方法

    ### Python从数据库读取大量数据批量写入文件的方法 在数据科学与数据分析领域,处理大量数据是一项常见的任务。当数据量过大无法一次性加载到内存中时,就需要采取分批处理的方式来减轻内存负担并提高程序效率。...

    课题-Python-MySQLdb-学习总结.doc.docx

    6. **批量操作**:`executemany()`方法是执行多条相似SQL语句的有效方式,特别是插入大量数据时,可以减少网络IO和磁盘IO,提高性能。但要注意,一次性发送过多数据可能导致服务器缓冲区溢出,因此可能需要分批执行...

    mysql(全国各省、市、县、镇、村数据).zip

    MySQL数据库是中国最广泛使用的开源关系型数据库之一,它在处理大量结构化数据方面表现出色。在本案例中,"mysql(全国各省、市、县、镇、村数据).zip"是一个压缩包,其中包含了关于中国行政区域划分的详细数据。这个...

    Python抓取京东数据

    通过上述步骤,我们可以高效地从京东网站抓取大量的商品评论数据,并将其存储在MySQL数据库中。这种技术不仅可以应用于图书评论的抓取,还可以扩展到其他商品类型,甚至其他电商平台。同时,结合数据分析工具和技术...

    mysql DB引擎myisam与innodB

    因此,MyISAM 在处理大量的读取请求时性能较高,但在写入操作较多的情况下性能会受到较大影响。 2. **缓存机制**:InnoDB 和 MyISAM 在缓存方面的设计也有所不同。InnoDB 的数据缓存机制更加复杂,除了支持数据...

    Excel数据导入数据库

    然而,当需要对大量数据进行复杂操作或与数据库系统交互时,将Excel数据导入数据库就显得尤为重要。下面我们将详细探讨这个过程。 首先,我们要理解什么是"Excel上传类"。在编程中,"上传类"通常指的是一个专门用于...

    PHP 多种数据库 mysql等6种 独立查询接口 类 实现源码

    - `fetchRow()`: 获取查询结果的一行数据。 - `close()`: 关闭数据库连接。 子类则重写这些方法以适应不同数据库的语法和特性。例如,`MysqlDB`类可能会这样实现`connect()`方法: ```php class MysqlDB extends DB...

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

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

    02_从数据库中读取数据.zip

    10. 数据库性能优化:在处理大量数据时,需要考虑索引、分页、缓存等策略来优化性能。例如,为提高查询速度,可以为经常用于过滤的字段创建索引。 通过以上知识,你可以有效地从数据库中读取数据以支持Python Web...

    ABBREV.txt--用于做python数据库实验的营养数据源

    在Python编程中,数据库操作是一项重要的技能,尤其是在处理大量数据时。"ABBREV.txt" 文件是为Python数据库实验提供的一种营养数据源,它在Python基础教程的13.2.2章节中的数据库应用程序示例中被引用。由于原始...

    工具查询MYSQL5 LOG 分析工具-mysql-log-analysis.zip

    通用日志记录了所有的SQL语句,但这在生产环境中通常被禁用,因为会产生大量的日志数据。 "mysql-log-analysis"工具可能包含的功能有: 1. **日志解析**:能够读取和解析上述各种类型的MySQL日志文件,将原始的...

    12.Pandas、Matplotlib结合SQL语句对比图分析1

    在数据分析领域,Python的Pandas、Matplotlib以及SQL语句的结合使用是非常强大的工具,能够帮助我们高效地处理和可视化大量数据。这篇文章主要探讨如何利用这些工具进行对比图分析,以深入理解数据集的特性。 ...

Global site tag (gtag.js) - Google Analytics