我是靠谱客的博主 土豪美女,这篇文章主要介绍python操作mysql流式读取数据—你没见过的黑科技,现在分享给大家,希望可以做个参考。

终于又和大家见面了!有好久不更新笔记了,今天来给大家分享一个大招!在分享之前,大家肯定遇到过mysql读取大量数据的操作吧,我想如果一次性读取大批数据,你的内存肯定撑不住,cpu跑满,或者服务器宕机的可能性都有。那么我们该如何避免呢,我想大多数人会想到分块读取,根据id来设置取值范围!这种方法可行,但是还有一种更好的方法,那就是流式读取法!类似于我们读取视频流信息,今天给大家分享点干货,记得点赞+关注哦!

一、mysql流式读取
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# coding=utf-8 from DBUtils.PooledDB import PooledDB import pymysql, sys reload(sys) sys.setdefaultencoding("utf-8") MYSQL_DB_NAME = "xxxx" MYSQL_DB_USER = "xxxx" MYSQL_DB_PWD = "xxxx" if sys.platform == 'win32': MYSQL_DB_HOST = "xxxx" elif sys.platform == 'darwin': MYSQL_DB_HOST = "xxxx" else: MYSQL_DB_HOST = "xxxx" pool = PooledDB(pymysql, host=MYSQL_DB_HOST, user=MYSQL_DB_USER, passwd=MYSQL_DB_PWD, db='adinsights_v3', port=3306, charset="utf8", cursorclass=pymysql.cursors.SSCursor) conn = pool.connection() cs = conn.cursor() sql = "SELECT * from material_new" try: cs.execute(sql) while True: result = cs.fetchone() if result: print(result) else: break except: pass cs.close() conn.close()

1、使用pymysql.cursors.SSCursor代替默认的cursor。可以使用以上代码,或者这样写:conn.cursor(pymysql.cursors.SSCursor)
2、使用fetchone去每次只获得一行,别使用fetchall。也可以使用fetchmay,但是这样其实是多次调用fetchone。

二、mysq流式介绍

对于SSCursor有一个错误的理解,就是SSCursor是服务端一次性读出所有数据然后一条一条返给客户端,其实不是这样的,这个cursor实际上没有缓存下来任何数据,它不会读取所有所有到内存中,它的做法是从储存块中读取记录,并且一条一条返回给你。这里有一个更适合的名字:流式游标。

最后

以上就是土豪美女最近收集整理的关于python操作mysql流式读取数据—你没见过的黑科技的全部内容,更多相关python操作mysql流式读取数据—你没见过内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部