pandas配合Django异步把数据库数据导出成excel文件
前言
前几分钟写了一个同步的数据库数据导出文件,如果是数据量比较大的话,这个会很慢。
解决办法就是 开启一个线程让他在一边去执行,然后我们返回文件的路径,以供前端进行下载。
大致的东西都和原来类似,有人说了Django这个orm使用模糊查询太慢了,要是数据量在20万以内的话,不能算慢,要不人家为什么会提供这种方法呢。
获取数据
# 从前端获取到的参数
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() # 获取序列化后的评论数据
开启一个线程进行数据的处理
import threading
file_name = 'commend(' + time.time + ').xlsx' # 利用时间戳防止文件重名
file_path = '/data/files/' + file_name # 拼接文件路径
t1 = threading.Thread(target=alert_async_export_2_excel,args=(comment_list,file_path)) # 创建一个线程,并传入数据
t1.start() # 启动该线程
# 返回给前端 一个拼接的文件路径就行了 127.0.0.1 + file_path
# 线程函数
def alert_async_export_2_excel(value_list,file_path):
import pandas as pd
dt = pd.DataFrame(value_list, columns=['name','title','desc'])
# 导出excel
dt.to_excel(file_path, index=False) # 这样就把文件写入到本地服务器了,然后他人通过然会的url去访问本地服务器达到下载的效果