问题描述
我正在创建一个应用程序,其中有一个用于下载数据库的按钮。我在后面使用 FastAPI 和 MongoDB。
filtered_db = db.collection.find(base_query)
docs = []
async for doc in docs:
docs.append(Document(**doc).dict())
df = pd.DataFrame(docs)
return Response(content=df,media_type="text/csv")
这是我的代码示例,过滤 MongoDB 中的数据库,然后使用模型并将其转换为数据帧。但这不起作用,你能帮我吗?
我有错误:"AttributeError: 'DataFrame' object has no attribute 'encode'"
解决方法
首先,如果您尝试将检索到的 filtered_db
数据附加到 docs
列表。您正在阅读一个空列表 docs
应该是
filtered_db = db.collection.find(base_query)
docs = []
async for doc in filtered_db:
如果您尝试将数据导出到 .csv
文件,则可以使用 DataFrame.to_csv 函数
return df.to_csv('output.csv')
如果您希望 API 在响应中显示 .csv
文件,您可以这样做
return Response(content=df.to_csv(),media_type="text/csv")
顺便说一下,这里有一个完整的 FastAPI 示例
from fastapi import FastAPI,Response
from pydantic import BaseModel
import pandas as pd
app = FastAPI()
class Document(BaseModel):
id: int
column1: str
column2: str
filtered_db = [
{"id": "1","column1": "c1-value1","column2": "c2-value1"},{"id": "2","column1": "c1-value2","column2": "c2-value2"}
]
async def read_data(data: list):
docs = []
for doc in data:
docs.append(Document(**doc).dict())
df = pd.DataFrame(data=docs)
return df
@app.get("/xlsx")
async def get_excel():
df = await read_data(filtered_db)
# export data to csv
# df.to_csv('output.csv')
return Response(content=df.to_csv(),media_type="text/csv")