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:获取或设置配置了此绑定 ...
随机推荐
- 暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx
\[\text{暑假集训CSP提高模拟}\int^{6}_{0}\frac{x^{2}}{6}dx \] 关于这个东西怎么求的良心教程 含义:求出 \(f(x)=\frac{x^{2}}{6}\) 在 ...
- 《HelloGitHub》第 102 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...
- 立足信创国产化运维,打造安全可控IT运维管理系统
随着国产化信创应用试点行业的不断扩大,应用信创产品的企事业单位逐渐增多.大多数企业均面临着陌生的国产化环境与产品,其使用习惯和解决问题的方式都面临改变.北京智和信通切实立足用户需求,提供信创运维服务. ...
- Web前端技术丛书代码下载
我是清华社编辑,这些下载资源供读者个人学习使用,禁止商用. IE/Chrome下载,或者微信扫描二维码,按提示发邮箱下载. 二维码用微信扫码,可填写邮箱,把链接转发邮箱下载. <微信小程序开发从 ...
- CTF中特别小的EXE是怎么生成的
我们在打CTF时候,出题的爷爷们给出的exe都很小 就10k左右,有的甚至就5k,那时候我很郁闷啊.现在我也能了啊哈哈 不多bb按如下操作: 我们来看看正常的release生成的代码 #include ...
- vue 组件中使用 scoped 有的样式不会生效 解决办法
造成原因:组件的嵌套导致 : 解决:
- web端ant-design-vue-Anchor锚点组件使用小节(1)
web端ant-design-vue-Anchor锚点组件使用小节.项目开发中如果要实现前端页面平滑滚动到指定的位置,Anchor组件是一个好的选择,灵活且平滑,能满足常见的项目需求.最近开发中幸运的 ...
- linu管理文本文件
vi\vim编辑器的三种工作模式 命令模式(Command mode):按键编辑器都理解为命令,以命令驱动执行不同的功能.此模型下,不能自由进行文本编辑. 输入模式(Insert mode):也就是所 ...
- 批处理-- 查询进程,杀进程,启动pythond程序,任务计划程序
@echo off wmic process where caption="python.exe" get processid,commandline | findstr &quo ...
- .NET9 - 新功能体验(二)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化. 01.新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref ...