微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载 Excel 格式的数据库

如何解决下载 Excel 格式的数据库

我正在创建一个应用程序,其中有一个用于下载数据库的按钮。我在后面使用 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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。