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:获取或设置配置了此绑定 ...
随机推荐
- Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器
01.应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法,以设置最低日志级别.为事件添加额外属性以及控制日志输出. Serilog 主要通过代 ...
- android 性能优化 -systrace
简介: Systrace允许监视和跟踪Android系统的行为(trace).它会指明系统都在哪些工作上花费时间.CPU周期都用在哪里,甚至可以看到每个线程.进程在指定时间内都在干嘛.它同时还会突出观 ...
- dotnet 泛型委托 ACTION FUNC
void Main() { // 泛型委托 ACTION FUNC // 3. 创建委托实例 TestDele<string> testDele = new TestDele<str ...
- select语句
SELECT语句可以从表中选择数据 SELECT <列名1>,<列名2> as "aaa" FROM <表名>; 查询两列数据SELECT * ...
- AWR分享案例
[深度长文]循序渐进解读Oracle AWR性能分析报告 - ORACLE - dbaplus社群:围绕Data.Blockchain.AiOps的企业级专业社群.技术大咖.原创干货,每天精品原创文章 ...
- HTML 中 script 标签的属性和加载顺序
script 标签默认是阻塞加载的,也就是先下载src内容,然后执行src内容,然后再往后读文档 head 中的 script 按顺序加载执行,然后再加载 body 的元素. 把 script 移动到 ...
- 使用 Cursor 和 Devbox 快速开发并上线 Gin 项目
作为开发者,最让我们头疼的事情是什么?那必须是环境配置.版本控制以及各种部署配置等等繁琐的工作. 想象一下,如果你只需点击几下鼠标,就能拥有一个完全配置好的开发环境,支持从 Java 到 Python ...
- Games104 现代游戏引擎 Picoolo环境搭建 vulkan配置
0 前言介绍 games104 现代游戏引擎课程是由 GAMES: Graphics And Mixed Environment Symposium 支持的一个课程. 如我们所视,Games并非的含义 ...
- 基于CTFshow的文件上传二次渲染绕过与CTF实战
1. 二次渲染简介 二次渲染指的是上传的文件(如图片),为了显示的更加规范(尺寸.像素),网站会对文件进行二次处理,经过解码或转换可能导致其中的恶意代码失效.例如,后门程序在图像渲染过程中可能被清除或 ...
- 拿去面试!一个基于 DDD 的高性能短链系统
众所周知,商城.RPC.秒杀.论坛.外卖.点评等项目早早就烂大街了,翻开同学的简历一看 10 个里面有 9 个是这些,翻遍全网再很难找到一个既有含金量又能看得懂的项目,针对此,我研发了这样一个可以快速 ...