导航
- 引子
- 棘手的需求
- 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
吧!