如何使用 FastAPI 和 Pandas 将 CSV 文件上传到 MongoDB

问题描述 投票:0回答:1

我目前正在尝试在我的客户端使用一个上传功能,该功能需要一个 csv 文件并将其上传到 mongoDB 中。如果有人知道如何提供帮助,我将不胜感激!

这是我当前的代码

@router.post("/uploadfile", response_description="upload a file")
async def upload(request: Request,file: UploadFile = File(...)):
    contents = file.file.read()
    buffer = BytesIO(contents)
    df = pd.read_csv(buffer)
    buffer.close()
    file.file.close()
    df.to_dict(orient='records')
    await request.app.mongodb["SentenceModel"].insert_one(file.file)



我也有能力将文件上传到 mongo,但只有一个文档,所有数据都作为对象,而它应该是 1700 个文档。这是代码

    @router.post("/uploadfile", response_description="upload a file")
async def upload(request: Request,file: UploadFile = File(...)):
    csvReader = csv.DictReader(codecs.iterdecode(file.file, 'utf-8'))
    data = {}
    for rows in csvReader:             
        key = rows['rowNum'] 
        data[key] = rows  
    
    file.file.close()
    await request.app.mongodb["SentenceModel"].insert_one(data)

我已经尝试过许多我看到的其他方法,但发现没有任何运气......我上传数据没有问题但我希望数据一旦上传就插入到mongo中

pandas mongodb pymongo fastapi
1个回答
0
投票

我修好了!对于任何想知道我做错了什么的人......我没有把我的mongo请求放在我的for循环中......

@router.post("/uploadfile", response_description="upload a file")
async def upload(request: Request,file: UploadFile = File(...)):
    data = {}
    contents = file.file.read()
    buffer = StringIO(contents.decode('utf-8'))
    csvReader = csv.DictReader(buffer)
    for row in csvReader:  
        key = row['rowNum']
        data[key] = row  
        await request.app.mongodb["SentenceModel"].insert_one(row)

    buffer.close()
    file.file.close()
© www.soinside.com 2019 - 2024. All rights reserved.