1)使用SSCursor,避免客户端占用大量内存。
2)使用迭代器而不用fetchall,即省内存又能很快拿到数据。
这样改进后,原本程序占用14GB内存,现仅占用700MB。
参考文章:
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取回大结果集的技巧