在fastapi將dataframe資料轉成csv response

2023/09/14

範例

from fastapi import APIRouter
from fastapi.responses import StreamingResponse
from pandas import DataFrame
from io import StringIO

router = APIRouter(prefix='/download')

@router.get(
    "/demo",
    description="demo"
)
def download_demo():
    data = [
        {"name": "John", "city": "New,York"},
        {"name": "Mike", "city": "Los Angeles"},
    ]
    df = DataFrame(data)
    df = df.rename(columns={
        'name': '姓名',
        'city': '居住地',
    })
    csv_string = df.to_csv(index=False)
    csv_io = StringIO(csv_string)

    return StreamingResponse(
        content=csv_io,
        media_type="text/csv",
        headers={
            "Content-Disposition": "attachment; filename=demo.csv",
        }
    )