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去访问本地服务器达到下载的效果

同步使用这些代码导出excel

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