python - FastAPI,返回带有 sql 查询输出的 File 响应
问题描述
我正在使用 FastAPI,目前我返回了一个 csv,它是从带有 pandas 的 SQL 服务器读取的。(pd.read_sql()) 但是 csv 对于浏览器来说非常大,我想用文件响应返回它: https ://fastapi.tiangolo.com/advanced/custom-response/(页面末尾)。如果不先将其写入一个 csv 文件,我似乎无法做到这一点,这似乎很慢,并且会在每个请求上用 csv 混淆文件系统。
所以我的问题是,有没有办法从 sql 数据库或 pandas 数据框中返回 FileResponse。
如果没有,有没有办法在客户端读取完生成的 csv 文件后删除它?
谢谢你的帮助!
亲切的问候,
斯蒂芬
解决方案
基于此https://github.com/tiangolo/fastapi/issues/1277
- 将您的数据框转换为流
- 使用流式响应
- 修改标题,使其成为下载(可选)
from fastapi.responses import StreamingResponse
import io
@app.get("/get_csv")
async def get_csv():
df = pandas.DataFrame(dict(col1 = 1, col2 = 2))
stream = io.StringIO()
df.to_csv(stream, index = False)
response = StreamingResponse(iter([stream.getvalue()]),
media_type="text/csv"
)
response.headers["Content-Disposition"] = "attachment; filename=export.csv"
return response
推荐阅读
- azure - 动态创建 ARM 参数名称
- java - 在数据库中找到同名用户时如何更改变量的值?
- c# - Task.WaitAny() — 检查结果
- swift - 斯威夫特:表视图与像表视图部分
- c# - 如何在 Network Luna HSM 上为 AES 密钥设置/创建密钥值?
- python-3.x - Selenium - 日历选择器 - 选择当前日期 NoSuchElementException Python 3
- vue.js - VueJS dropzone 在拖放时无法正常工作
- python - 套接字输出被截断到下一个文件
- objective-c - Objective C中的预处理器#if错误评估?
- c# - 是否可以在生成 Step 绑定时限制 specflow 搜索测试的项目?