美文网首页python小课——零基础入门——学习笔记
python操作mysql流式读取数据(你没见过的黑科技)

python操作mysql流式读取数据(你没见过的黑科技)

作者: 逆向与爬虫的故事 | 来源:发表于2021-03-16 10:42 被阅读0次

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

    一、mysql流式读取
    # 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流式读取数据(你没见过的黑科技)

        本文链接:https://www.haomeiwen.com/subject/bgircltx.html