terminate.jpg

首页

技术分享

从流(stream)里下载数据

2021-10-16 11-59-19 的屏幕截图.png

下面的代码从一个简单的只有flask和pandas以及其依赖包的环境中可以运行

想要让下载文件在服务器不落地,直接从数据库获取数据,写入流,最后通过flask的send_file函数来下载,见以下步骤

  • 创建一个dataframe
  • 创建一个bytesIO
  • 创建一个ExcelWriter(或其他数据)
  • 将数据写入流(BytesIO)
  • 保存数据
  • 把流的指针指向0
  • 下载流数据

from flask import Flask, send_file
import pandas as pd
import io

app = Flask(__name__)


@app.route('/')
def hello_world():
df = pd.DataFrame([{"h1": 1, "h2": 3, "h3": 555}])
byte_io = io.BytesIO()
writer = pd.ExcelWriter(byte_io, engine='openpyxl')

df.to_excel(writer)
writer.save()
byte_io.seek(0)

return send_file(byte_io, as_attachment=True, attachment_filename="report.xlsx", mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")


Comments:

captcha