最新消息:

MySQLdb取回大结果集的技巧

MySQL数据库 admin 5144浏览 0评论

1)使用SSCursor,避免客户端占用大量内存。

2)使用迭代器而不用fetchall,即省内存又能很快拿到数据。

 

这样改进后,原本程序占用14GB内存,现仅占用700MB。

参考文章:

http://url.cn/PRGTIp

http://url.cn/MLARfT

http://url.cn/P21IXh

MySQL大结果集分次取回,不耗费大内存的lazy计算的方法

Python导数据的时候,需要在一个大表上读取很大的结果集。

如果用传统的方法,Python的内存会爆掉。因为无论是fetchone()还是fetchall(),都是把结果集读取到本地的。

解决的方法:

conn = MySQLdb.connect(host='ip地址', user='用户名', passwd='密码', db='数据库名', port=3306,
 charset='utf8', cursorclass = cursors.SSCursor)

需要注意的是,结果集只要没取完,这个conn是不能再干别的事情的,包括另外生成一个cursor也不行的。

如果需要干别的,请另外再生成一个连接对象。

转载请注明:jinglingshu的博客 » MySQLdb取回大结果集的技巧

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 很好的文章,实践下
    admin12年前 (2013-12-25)回复