Finereport调用python服务进行大数据量导出
Finereport调用python服务进行大数据量导出

背景:
在使用finereport过程中,我们发现在数据导出这块一直是一个瓶颈,闲来无事,思索一番,想出来一种场景来应对此问题。供各位大佬参考讨论,也欢迎其他大佬提供更好的解决方案。
文笔较差,大佬见谅。
废话不多说,直接上代码,案例。
正文:
首先,我们需要使用python启一个flask服务,来供传递参数,sql等。
本次举例写的固定sql,后续大家可以自行优化扩展。
1.启动flask服务
from flask import Flask, request, jsonify, send_file
import pymysql
import pandas as pd
import threading
import os
import time
app = Flask(__name__)
# 数据库连接配置
db_config = {
'host': '123.60.210.247',
'user': 'mytest',
'password': 'nQQM690Y',
'database': 'testdb'
}
# 数据库连接
def connect_db():
return pymysql.connect(**db_config)
# 导出到CSV函数
def export_to_csv(sql, params, output_file):
connection = connect_db()
try:
# 执行查询并使用参数化查询
with connection.cursor() as cursor:
cursor.execute(sql, params) # 使用参数化查询
result = cursor.fetchall()
# 如果没有结果,返回None
if not result:
return None
# 将查询结果转换为DataFrame并写入CSV
df = pd.DataFrame(result, columns=[i[0] for i in cursor.description])
df.to_csv(output_file, index=False, encoding='utf-8')
print(f"CSV文件已生成: {output_file}")
return output_file
finally:
connection.close()
# 后台线程处理文件导出
def generate_csv(sql, params, output_file):
export_to_csv(sql, params, output_file)
# 这里为了验证场景使用的get请求,实际大多数情况下都需要传递参数,推荐post请求。
@app.route('/run_report', methods=['GET'])
def run_report():
params = request.args.getlist('params') # 获取URL查询参数
sql = "SELECT * FROM test_table" # 默认的SQL查询
# 生成唯一的输出文件名(可以用时间戳或UUID)
output_file = f'output_{int(time.time())}.csv'
# 启动后台线程生成CSV文件
thread = threading.Thread(target=generate_csv, args=(sql, params, output_file))
thread.start()
# 等待线程完成,确保文件生成后直接返回文件
thread.join() # 确保线程完成后返回
# 如果文件生成成功,直接返回文件
if os.path.exists(output_file):
return send_file(output_file, as_attachment=True, mimetype='text/csv')
else:
return jsonify({'error': '生成CSV文件失败'}), 500
if __name__ == '__main__':
app.run(debug=True)
2.创建模板:
在按钮点击事件上绑定服务地址即可。
提示这块目前做的比较粗糙,大家可以自行优化。
window.location.href="http://127.0.0.1:5000/run_report"
FR.Msg.alert("提示","数据正在下载请稍后");
3.示例模板
4.示例操作

不知道怎么上传视频,大家自己尝试吧
第一次写贴子,写的不咋好,大家见谅,感谢。顺便吐槽一句,这个发帖写作的好难使用啊。
目前仅为思路的验证,代码健壮性目前比较差,见谅。
Finereport调用python服务进行大数据量导出的更多相关文章
- poi 操作Excel 以及大数据量导出
maven 依赖 (版本必须一致,否则使用SXSSFworkbook 时程序会报错) <dependency> <groupId>org.apache.poi</grou ...
- SQL Server 使用bcp进行大数据量导出导入
转载:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html SQL Server的导出导入方式有: 在SQL Server中提供了 ...
- Export大数据量导出和打包
项目需求 导出生成大批量数据的文件,一个Excel中最多存有五十万条数据,查询多余五十万的数据写多个Excel中.导出完成是生成的多个Excel文件打包压缩成zip,而后更新导出记录中的压缩文件路 ...
- 使用内存映射文件MMF实现大数据量导出时的内存优化
前言 导出功能几乎是所有应用系统必不可少功能,今天我们来谈一谈,如何使用内存映射文件MMF进行内存优化,本文重点介绍使用方法,相关原理可以参考文末的连接 实现 我们以单次导出一个excel举例(csv ...
- EasyPoi大数据导入导出百万级实例
EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...
- 【Python开发】Python 适合大数据量的处理吗?
Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...
- Python 大数据量文本文件高效解析方案代码实现
大数据量文本文件高效解析方案代码实现 测试环境 Python 3.6.2 Win 10 内存 8G,CPU I5 1.6 GHz 背景描述 这个作品来源于一个日志解析工具的开发,这个开发过程中遇到的一 ...
- WebService - 怎样提高WebService性能 大数据量网络传输处理
直接返回DataSet对象 返回DataSet对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用 ...
- 【转载】大数据量传输时配置WCF的注意事项
WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...
- WCF大数据量传输配置
WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...
随机推荐
- 安卓Android虚拟机分享及使用
不知道大家伙在安装安卓虚拟机时被各式各样的问题折磨过没,我在安装安卓虚拟机时,遇到的问题简直就像长江之水源源不断,就算是最后安装好了也会因为各式各样的原因无法进入启动桌面. 当我发现这个可以直接导入到 ...
- go 实现sse
package chat import ( "encoding/json" "github.com/zeromicro/go-zero/core/logx" & ...
- 一生财运三世书财运测算api接口免费版_json格式数据获取
三世书财运是根据生辰八字推算出的一个人今生的财运状况,它认为人的财运受到前世因果的影响,同时也会受到今生行为的影响.这种算命方法起源于佛教的<三世因果经>,据说可以推演一个人的前世.今 ...
- 【Simpleperf】Android的CPU分析,性能优化利器
很多时候,写代码是一件很爽的事情,但最后需要对APP进行瘦身.性能分析却是一件很棘手的事情.当需要对APP的性能进行分析时,Simpleperf是一个简单快捷的选择. 正文开始前,先奉上官方的资料: ...
- Java日期时间API系列36-----Jdk8中java.time包中的新的日期时间API类应用,使用LocalTime计算十二时辰。
十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰.二十四小时和十二时辰对照表: 时辰 时间 24时制 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 : ...
- markdown.css 设置文章的样式
返回的详情文章内容是标签加内容文字,使用 markdown,css 渲染样式 : .markdown-body .octicon { display: inline-block; fill: curr ...
- Python入门:A+B问题
1. A + B 问题I 前言 本篇作为课程第一篇,主要是对Python基础语法进行扫盲,本节课会学习到下面知识: 输入 本道题目的工作任务很简单,只是计算两个数的和,但是在计算之前,我们首先要明确的 ...
- 低配置PC环境下的魔兽世界游戏体验:ToDesk云电脑性能测试分析
近期魔兽世界再度开服,吸引了众多游戏老玩家回归.然而随着游戏内容的不断更新,其对电脑配置的要求也在逐渐升提高.对于许多电脑配置较低的老玩家,如何在不升级硬件的情况下流畅运行魔兽世界成为了一个难题. 随 ...
- TRLO: An Efficient LiDAR Odometry with 3D Dynamic Object Tracking and Removal
arxiv | 中科院联合国科大开源 TRLO:一种结合3D动态物体跟踪与移除的高效LiDAR里程计 [TRLO: An Efficient LiDAR Odometry with 3D Dynami ...
- mosquitto(MQTT)服务器搭建和基本使用
一.安装 搭建一个mqtt服务器,这里我们采用mosquitto 1. 下载地址:https://mosquitto.org/download/ 2. 选择windows:https://mosqui ...