python读取mysql怎么不会内存溢出
使用过java读取mysql大数据量的人应该都知道,如果查询时不开游标不设置一次性区大小的话,会一次性的把所有记录都拉取过来再进行后续操作,数据量一大就很容易出现OOM
如果用python去读取mysql也会遇到同样的问题
那么这么在python中来设置使用游标呢
也很简单
这里使用pymysql来举例子
普通创建mysql链接是这样的
import pymysql
db = pymysql.connect("localhost","user","password","dbname" )
cursor = db.cursor()
sql = "select * from xxx"
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
xxx....
except:
pass
db.close()
想用游标来控制数据拉取的话,只需要稍加修改就可以
import pymysql
db = pymysql.connect("localhost","user","password","dbname",cursorclass=pymysql.cursors.SSCursor )
cursor = db.cursor()
sql = "select * from xxx"
try:
cursor.execute(sql)
result = cursor.fetchone()
while True:
if result:
xxx....
result = cursor.fetchone()
else:
break
except:
pass
db.close()
这是一条一条读,当然也可以通过设置fetch的大小来一次读一定量的条数
我们来看看cursorclass这个参数是怎么说的
默认值是Cursor,返回的数据是元组形式的
DictCursor,除了返回是词典形式外,其他的与Cursor都相同
SSCursor,是服务端游标,结果集合储存在服务端并且传输行数通过fetch控制,其他与Cursor相同,最好只用在处理很大的数据结果集合上
SSDictCursor,除了返回是词典形式外,其他的与SSCursor相同
还没有评论,来说两句吧...