pandas配合Django同步把数据库数据导出成excel文件

前言

在工作中,我们经常需要导出数据库中或固定格式的数据。这个时候我们就要用到pandas来进行数据的处理了。pandas是一个非常优秀的python数据处理工具。

获取数据

# 从前端获取到的参数
starttime =  request.data.get('starttime')  # 开始时间
endtime =  request.data.get('endtime')  # 结束时间

# 获取评论模型中对应的数据 (判断就我就不写了,正式环境下尽量去写)
com = Comment.objects.filter(timestamp__gte=strattime,timestamp__let=endtime)
comment_list = com.values_list()  # 获取序列化后的评论数据

使用pandas进行数据的处理

这里使用了pandas库的一个DataFrame数据集,里面的参数主要有 data, index, columns, dtype, copy
经常使用的都有 data 和 columns 一个是数据源,一个是表头
to_excel 就是写入到哪个文件,他的参数是文件

io.BytesIO 这里使用这个主要是为了吧数据转为二进制文件流返回给前端进行下载

import pandas as pd   # 导入pandas 并重命名 pd
import io  
data = pd.DataFrame(comment_list)
data.columns(['时间','点赞数','标题','评论'])  # 设置excel表头
output = io.BytesIO()  # 配置一个BytesIO 这个是为了转二进制流
data.to_excel(output, index=False)  # index=False 是为了不建立索引
output.seek(0)  # 把游标归0

返回二进制流

response = HttpResponse()  # 创建一个HttpResponse 
response["Content-Type"] = "application/vnd.ms-excel"  # 类型
file_name = 'comment.xlsx'  # 文件名称 自定义
response['Content-Disposition'] = 'attachment;filename=%s' % file_name
response.write(output.getvalue())  # 写入数据
output.close()  # 关闭
return response  # 返回

总结

使用pandas最主要的是处理数据的结构。导出的话还是配合二进制流进行返回
若是数据量比较大的时候,尽量不要使用io.BytesIO() 去转二进制了,这样会浪费太多的时间,我们可以先这样后那样的去节省时间,未完待续。

异步使用这些代码导出excel

posted @ 2021-04-27 14:15  这是春天吧  阅读(1741)  评论(0编辑  收藏  举报