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.示例模板

后台导出.rar (1.99 K)

4.示例操作

不知道怎么上传视频,大家自己尝试吧

第一次写贴子,写的不咋好,大家见谅,感谢。顺便吐槽一句,这个发帖写作的好难使用啊。

目前仅为思路的验证,代码健壮性目前比较差,见谅。

Finereport调用python服务进行大数据量导出的更多相关文章

  1. poi 操作Excel 以及大数据量导出

    maven 依赖 (版本必须一致,否则使用SXSSFworkbook 时程序会报错) <dependency> <groupId>org.apache.poi</grou ...

  2. SQL Server 使用bcp进行大数据量导出导入

    转载:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html SQL Server的导出导入方式有: 在SQL Server中提供了 ...

  3. Export大数据量导出和打包

    项目需求 ​ 导出生成大批量数据的文件,一个Excel中最多存有五十万条数据,查询多余五十万的数据写多个Excel中.导出完成是生成的多个Excel文件打包压缩成zip,而后更新导出记录中的压缩文件路 ...

  4. 使用内存映射文件MMF实现大数据量导出时的内存优化

    前言 导出功能几乎是所有应用系统必不可少功能,今天我们来谈一谈,如何使用内存映射文件MMF进行内存优化,本文重点介绍使用方法,相关原理可以参考文末的连接 实现 我们以单次导出一个excel举例(csv ...

  5. EasyPoi大数据导入导出百万级实例

    EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...

  6. 【Python开发】Python 适合大数据量的处理吗?

    Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...

  7. Python 大数据量文本文件高效解析方案代码实现

    大数据量文本文件高效解析方案代码实现 测试环境 Python 3.6.2 Win 10 内存 8G,CPU I5 1.6 GHz 背景描述 这个作品来源于一个日志解析工具的开发,这个开发过程中遇到的一 ...

  8. WebService - 怎样提高WebService性能 大数据量网络传输处理

    直接返回DataSet对象 返回DataSet对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用Binary序列化后的字节数组 返回DataSetSurrogate对象用 ...

  9. 【转载】大数据量传输时配置WCF的注意事项

    WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...

  10. WCF大数据量传输配置

    WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...

随机推荐

  1. Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器

    01.应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法,以设置最低日志级别.为事件添加额外属性以及控制日志输出. Serilog 主要通过代 ...

  2. android 性能优化 -systrace

    简介: Systrace允许监视和跟踪Android系统的行为(trace).它会指明系统都在哪些工作上花费时间.CPU周期都用在哪里,甚至可以看到每个线程.进程在指定时间内都在干嘛.它同时还会突出观 ...

  3. dotnet 泛型委托 ACTION FUNC

    void Main() { // 泛型委托 ACTION FUNC // 3. 创建委托实例 TestDele<string> testDele = new TestDele<str ...

  4. select语句

    SELECT语句可以从表中选择数据 SELECT <列名1>,<列名2> as "aaa" FROM <表名>; 查询两列数据SELECT * ...

  5. AWR分享案例

    [深度长文]循序渐进解读Oracle AWR性能分析报告 - ORACLE - dbaplus社群:围绕Data.Blockchain.AiOps的企业级专业社群.技术大咖.原创干货,每天精品原创文章 ...

  6. HTML 中 script 标签的属性和加载顺序

    script 标签默认是阻塞加载的,也就是先下载src内容,然后执行src内容,然后再往后读文档 head 中的 script 按顺序加载执行,然后再加载 body 的元素. 把 script 移动到 ...

  7. 使用 Cursor 和 Devbox 快速开发并上线 Gin 项目

    作为开发者,最让我们头疼的事情是什么?那必须是环境配置.版本控制以及各种部署配置等等繁琐的工作. 想象一下,如果你只需点击几下鼠标,就能拥有一个完全配置好的开发环境,支持从 Java 到 Python ...

  8. Games104 现代游戏引擎 Picoolo环境搭建 vulkan配置

    0 前言介绍 games104 现代游戏引擎课程是由 GAMES: Graphics And Mixed Environment Symposium 支持的一个课程. 如我们所视,Games并非的含义 ...

  9. 基于CTFshow的文件上传二次渲染绕过与CTF实战

    1. 二次渲染简介 二次渲染指的是上传的文件(如图片),为了显示的更加规范(尺寸.像素),网站会对文件进行二次处理,经过解码或转换可能导致其中的恶意代码失效.例如,后门程序在图像渲染过程中可能被清除或 ...

  10. 拿去面试!一个基于 DDD 的高性能短链系统

    众所周知,商城.RPC.秒杀.论坛.外卖.点评等项目早早就烂大街了,翻开同学的简历一看 10 个里面有 9 个是这些,翻遍全网再很难找到一个既有含金量又能看得懂的项目,针对此,我研发了这样一个可以快速 ...