我目前正在尝试在我的客户端使用一个上传功能,该功能需要一个 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中
我修好了!对于任何想知道我做错了什么的人......我没有把我的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()