python导出10w条数据的解决方案
  楠木大叔   10/15/22 5:36:54 PM
前两天,帮一个小伙伴解决了一个在python中使用sql查询的问题。发现python使用的场景越来多了,更多的同学也开始使用python解决一些问题,这说明python越来越受大家的喜爱。

导航

  • 引子
  • 棘手的需求
  • python如何导出10w行数据
  • 实战案例
  • 结语
  • 参考

引子

前两天,帮一个小伙伴解决了一个在python中使用sql查询的问题。发现python使用的场景越来多了,更多的同学也开始使用python解决一些问题,这说明python越来越受大家的喜爱。





在前面《数据处理,我用python》中,笔者介绍了如何使用python从数据库查询数据并导出到Excel中。这种也是笔者经常做一些报表常用的方式。

棘手的需求

最近在做相关用户聊天数据的分析过程中,明显发现知识不够用了。因为分析的数据太大了,Excel自身有65536行限制,导致我们导出10w+的数据就显得捉襟见肘。

因为要对过去一个月、一个季度甚至一年的访客会话数据进行分析。粗略统计了一下,一个月的访客会话量平均达到30w左右。

我们要从这些会话中,按照项目维度统计引导顾客开口第一句引导话术。

这种数据量大,需求复杂的数据分析,确实不是一件容易的事情。

在处理这个问题的时候,很难一步就能搞定。我们往往需要多个步骤来逐步实现。比如,把这些数据导出来做一些分析,然后将这些中间数据处理之后,再导入到数据库,继续和其他表进行联表查询。

这里就不可避免的需要导出超过Excel行数限制的数据。

python如何导出10w行数据

那么,Python导出10w条数据的解决方案是什么呢?

经过多番资料查询和实践,将数据导出到csv文件是一个可行的方案。

实战案例

需求:

现有数据库用户表中有100w+数据。
导出前10w条数据到csv文件,字段如下:

用户Id 账户名 用户类型 昵称 日期

使用Python来实现,比较简单,这里给出一个万能模板,您只需要更改数据库连接,sql即可。


import pymysql
import csv
 
def mysql_db_sz_stock():
    # 连接数据库
    connect = pymysql.connect(host='localhost',   # 本地数据库
                              port=3336,
                              user='root',
                              password='bhwcu2a9',
                              db='meb_im',
                              charset='utf8mb4')  # 服务器名,账户,密码,数据库名称
    cursor = connect.cursor()
 
    sql = "SELECT `UserId`,`UserName`,`UserType`,`NickName`,`CreateTime` FROM USER LIMIT 0,100000"
 
    cursor.execute(sql)
    data = cursor.fetchall()
    connect.commit()  # 提交到数据库执行
 
    # ---------------------关闭数据库
    cursor.close()  # 关闭游标
    connect.close()  # 关闭数据库连接
    return data
 
# 将数据保存为csv文件
def write_csv():
    data = mysql_db_sz_stock()
    filename = './files/daily_view.csv'  # 文件名和路径
    with open(filename, mode='w', encoding='utf-8'as f:
        write = csv.writer(f, dialect='excel')
        write.writerow(['用户Id','账户名 ','用户类型','昵称','日期'])  # 先写下标题
        for item in data:
            write.writerow(item)
 
write_csv()
 

代码中几乎每行都有注释,这里不再赘述。

至此,代码已经编写完成,我们保存为dbExportCSV.py文件。

接下来,就是让代码run起来,导出到csv。

这里需要注意的是,我们需要提前搭建好python的运行环境。新手同学可以参考《Python安装和使用教程(windows)》

我这里使用的编辑器是VS Code,推荐您也使用。

上面的代码用VS Code 编辑器打开之后,执行

运行后发现csv文件的数据存在两个问题:

  • 数据隔行显示
  • 中文乱码


数据隔行显示的问题,可以通过添加newline解决。

with open(filename, mode='w',newline='',encoding='utf-8') as f:

但是,中文乱码的问题怎么解决呢?

经过一番查询,也找到了解决方案。

encoding='utf-8' 改成encoding='utf-8-sig'

这样一个相对完美的接解决方案就诞生了。

我们再次执行这个python语句,看看导出结果。

执行之后,生成了一个excel文件。



数据就已经导出成功了,完美!

结语

python对于数据处理具有天然优势,比如它的pandas,非常强大。有兴趣的同学可以进一步研究。

在实际使用过程中,一个文件就可以处理一个报表需求,管理也很方便。

在大数据时代,数据分析已经变得越来越受重视,如果您需要经常需要导出报表或者想成为一名数据分析工程师,那就赶快入手python吧!

参考

版权声明: 本文为智客工坊「楠木大叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。