如何将pandas dataframe传递给web中的按钮以获取下载文件(.csv或.xlsx)with flask,Python 2.7

问题描述 投票:-1回答:1

我的Web应用程序具有可视化功能,用户可以通过from ...day to ...day(开始日期到结束日期)查看图表(平均值,标准偏差),其中(生产线)然后请求SQL连接数据库。这是可视化形式。 :

enter image description here

在用户请求后,我的网络应用程序将显示大约31个图表,我添加3个按钮用于下载文件,每个网页中的图表都是这样的。 (例如,图表的第1,2号):

enter image description here enter image description here

这是我的javascript创建图表等文件.html(spc_chart.html)但尚未将数据框传递给.html

enter image description here

我拥有3个数组中的平均图表数据,标准图表数据,原始数据(使用avg,Std计算)的所有pandas数据框(名称为:ChartData Avg,ChartData Std,原始数据)。

我只知道如何下载文件必须在每个按钮上添加href="/..."并在python中设置@app.route('/...')然后将SQL发送到@app.route('/...')的每个def并在计算后将数据帧传递给web。 ref(Flask: Download a csv file on clicking a button)但我不知道如何在另一个@app.route(/...)中从def传递用户的SQL请求。

有没有办法将所有pandas数据帧传递到图表1,2,3,...中每个下载文件的按钮,或者将SQL发送到另一个app.route中的def?

python pandas csv flask xlsx
1个回答
0
投票

您可以使用以下函数首先以csv格式创建数据框:

def build_csv_data(dataframe):
    csv_data = dataframe.to_csv(index=False, encoding='utf-8')
    csv_data = "data:text/csv;charset=utf-8," + quote(csv_data)
    return csv_data

然后为您的下载链接创建一个回调函数,如下所示:

@app.callback(Output('download_link', 'href'), [<your dataframe input variables>])
    def callback_build_csv_data(dataframe):           
        return build_csv_data(dataframe)

最后在页面布局中添加下载链接,如下所示:

html.A('Download Data',
        id='download_link',
        download="rawdata.csv",
        href="",
        target="_blank"
        ),

希望这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.