![](/img/trans.png)
[英]How can I set a "download as csv" button for a pandas dataframe with Flask?
[英]How to pass pandas dataframe to button in web for download file(.csv or .xlsx) with flask, Python 2.7
我的 Web 应用程序具有可视化功能,供用户查看图表(平均,标准偏差), from ...day
to ...day
(开始日期到结束日期),其中(生产线)然后请求 SQL 连接数据库。 这是可视化形式。 :
在用户请求后,我的网络应用程序将显示大约 31 个图表,我添加了 3 个按钮用于下载文件,网络中的每个图表都如下所示。 (示例。图表的编号 1,2 ):
这是我的 javascript 用于在文件.html
(spc_chart.html) 中创建图表和等,但尚未将数据帧传递给.html
:
我在 3 个数组(名称是:ChartDataAvg、ChartDataStd、RawData)中拥有 Avg Chart Data、Std Chart Data、Raw Data(使用计算 Avg、Std)的所有 Pandas 数据框。
我只知道如何下载文件必须在每个按钮上添加href="/..."
并在 python 中设置@app.route('/...')
然后将 SQL 发送到@app.route('/...')
每个 def @app.route('/...')
并在计算后将数据帧传递给网络。 ref( Flask: Download a csv file on @app.route(/...)
a button )但我不知道如何在另一个@app.route(/...)
从 def 传递用户的 SQL 请求。
有什么方法可以将所有 Pandas 数据帧传递给每个图表 1、2、3 中的下载文件的按钮,或者将 SQL 发送到另一个app.route
def ???
您可以首先使用以下函数以 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"
),
希望这是有用的。
这是我解决这个问题的方法:
@app.route('/download-data/')
def download_data():
"""Download the data to the user as a csv..."""
# Retrieve the data from user's request
data = cache.get("my_data")
if not data:
return jsonify({
"ERROR": "data not found."
})
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Load from the format it was saved in
df = pd.DataFrame.from_records(data)
csv_data = df.to_csv(index=False, encoding='utf-8')
response = Response(csv_data,mimetype='text/csv')
response.headers.set("Content-Disposition", "attachment", filename="data.csv")
return response
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.