读取大数据量时,使用 SSCursor (流式游标) 解决 Python 使用 pymysql 查询大量数据导致内存使用过高的问题

如果用传统的 fetchall() 或 fetchone() 方法,都是先默认在内存里缓存下所有行然后再处理,大量的数据会导致内存资源消耗光,内存容易溢出。

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

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

重点注意

因为 SSCursor 是没有缓存的游标,结果集只要没取完,这个 conn 是不能再处理别的 sql,包括另外生成一个 cursor 也不行的。如果需要干别的,请另外再生成一个连接对象。每次读取后处理数据要快,不能超过 60 s,否则 mysql 将会断开这次连接,也可以修改 SET NET_WRITE_TIMEOUT = xx 来增加超时间隔。

**报错 userwarning:previous unbuffered result was left incomplete警告警告(“previous unbuffered result was left incomplete”)python **

以前的未缓冲结果是不完整的 这只是警告,你不必当真。

根本原因是你正在使用

cursorclass=pymysql.cursors.SSCursor

执行其他sql语句,必须 重新建立 连接数据库,不能使用当前连接

流式游标使用方法

import pymysql# 打开数据库连接
conn = pymysql.connect(host='127.0.0.1',db = "c",port=3306,user='root',passwd='123456',charset = 'utf8'# cursorclass=pymysql.cursors.DictCursor, # dict 入库# cursorclass=pymysql.cursors.SSDictCursor # 流式游标
)sql = 'SELECT id FROM c ;'cursor = conn.cursor(pymysql.cursors.SSDictCursor)#这里改游标类型了!!!!!!!# cursor = conn.cursor(pymysql.cursors.SSCursor)#这里改游标类型了!!!!!!!# cursor = conn.cursor() #普通游标cursor.execute(sql)while True:row = cursor.fetchone()if not row:breakprint(row)keywords = row['believe_code']# 更新经纬度up_sql = "UPDATE `c` SET l = '37',n = '114' WHERE id = '21'"try:cur = conn_update.cursor()cur.execute(up_sql)conn_update.commit()cur.close()except:print('失败-更新经纬度')conn_update.rollback()# 关闭游标cursor.close()# 关闭数据库连接conn.close()

pymysql.cursors.SSCursor 报错 Previous unbuffered result was left incomplete相关推荐

  1. UserWarning: Previous unbuffered result was left incomplete

    UserWarning: Previous unbuffered result was left incomplete 循环插入和查询中使用 fetchone() 报错 fetchone() : 返回 ...

  2. 报错previous declaration invalid use of incomplete type

    报错之前 typedef structfloat cut_val;int8_t cut_dim;uint32_t start_idx;uint32_t n;float cut_bounds_lv;fl ...

  3. sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.

    sqlserver2008安装报错 "Previous releases of Microsoft Visual Studio 2008″ failed. <Date: 2010-04 ...

  4. SVN报错“previous operation has not finished…“的解决办法

    SVN因多次操作卡死,报错"previous operation has not finished-", 无法进行任何新操作时,可以在SVN的工作目录下打开命令行窗口,输入&quo ...

  5. Cesium 定位到图层(ImageryLayer)报错 DeveloperError: normalized result is not a number

    Cesium 定位到图层(ImageryLayer)报错 DeveloperError: normalized result is not a number 错误原因 调试定位问题过程 问题解决 总结 ...

  6. docker报错:WSL 2 installation is incomplete

    docker报错:WSL 2 installation is incomplete 错误原因:大概率是wsl未安装或者是未升级成wsl2 检查wsl版本方法:在powershell中使用命令wsl - ...

  7. python写入数据库_Python pymysql写入数据库报错

    我在用Python pymysql写入数据库时一直报错: pymysql.err.InternalError: (1366, u"Incorrect decimal value: 'xa0' ...

  8. Mysql报错:1172 - Result consisted of more than one row

    执行mysql函数时报错:1172 - Result consisted of more than one row 函数语句中select into语句中WHERE account = userNam ...

  9. 存储过程报错ERROR 117242000 - Result consisted of more than one row

    今天在学习sql函数时候遇到以下问题: 参考: 一开始总是在纠结是不是存储过程哪里写错了,最后却发现数据表被人动过,插入了重复的记录,所以在select into 的时候会报错.自己也反应也忒慢了,竟 ...

最新文章

  1. linux c实现函数回调,c语言实现linux抓包
  2. c语言delay_C语言编程制作“古怪手电筒”,有光的时候就会亮,没光绝不会亮...
  3. PHP mkdir()无写权限的问题解决方法
  4. mysql udf提权_MySQL日志安全分析技巧
  5. 【机器学习实战之一】:C++实现K-近邻算法KNN
  6. 根据文法画出语法树_输入语法推断的强化学习
  7. R包制作(千字详细图文)
  8. 网易云音乐java爬虫_用Java实现网易云音乐爬虫
  9. Keras中文文档总结
  10. 用matlab化简三角函数方程组,matlab化简三角函数 matlab怎么样化简三角函数?
  11. K米在线超市实施步骤及检查列表
  12. 跨时钟域脉冲信号处理——脉冲同步器
  13. vue回到顶部(常用)
  14. Android虚拟机和类加载机制
  15. 基于JavaEE的健身器材产品专卖店管理系统_JSP网站设计_MySQL数据库设计
  16. 字节跳动 录屏功能_免费屏幕录制软件有哪些?原来这么多
  17. Linux命令-查看用户的UID和GID
  18. Python引用pymssql模块打包报错的解决方法
  19. 【安全】文件上传绕过技巧
  20. 带你实现java根据表结构动态导入导出Excel

热门文章

  1. 开通云闪付有什么好处
  2. mysql查询财两个人信息_春 东财《MySQL数据库系统及应用》在线作业二(随机)
  3. 带孩子们做环球旅行的读后感_教师一句话影响孩子一生,老师们该怎么做?
  4. PWNHUB 五月公开赛+内部赛 writeup(【5月公开赛】MyNotes TemplatePlay 【胖哈勃内部赛|五月,你好】MockingMail)
  5. 辛星Java动态规划算法教程汇总【刷题用】
  6. TVB 經典螢幕情侶 --- 動人的愛情故事
  7. Linux搭建tengine2.0<Nginx>+php7环境
  8. 高德地图 点聚合功能(Adnroid)
  9. Dgraph使用总结
  10. 天融信风险探知系统荣获2016中国计算机行业发展年度优秀产品奖