본문 바로가기
Backend/Python

[FastAPI] MongoDB Error - Type Error

by 천우산__ 2024. 2. 6.

FastAPI 를 활용해서 아래와 같이 데이터를 넣는 도중 MongoDB에 데이터를 넣는 중 에러가 발생했다.

@router.post("/")
def request_regist(Create_Request: Create_Request):
    year, month, day = map(int, Create_Request.dead_line.split("."))

    request_data = { 
                    "request_date": datetime.datetime.now()
                    }
    
    db.tech.insert_one(request_data)
    return requset_data

 

TypeError: 'ObjectId' object is not iterable

오류로 인해 DB에 데이터가 삽입되지 않았을 것으로 예상했는데, DB에는 정상적으로 적재되어 있었다.

패키지나 설정의 문제가 아닌가 싶어서 여러 방향으로 확인을 하던 중 한 가지 생각이 들었다.

 

ObjectId를 사용한 적이 없는데, 관련해서 에러가 발생한 것이라면

insert_one 이후에  request_data 가 바뀌었을 수도 있다고 있다고 생각하고, insert 이후에 데이터를 확인해 보니

입력할 때 없었던 데이터가 생겼다.

{
	'request_date': datetime.datetime(2024, 2, 6, 18, 17, 26, 857534), 
	'_id': ObjectId('65c1f92671d5e76e3c73c5a3')
    }

이대로 return 하는 경우에 Type Error가 발생하는 것으로 보여

아래와 같이 수정하니 정상적으로 작동했다.

from bson.json_util import dumps
import json

@router.post("/")
def request_regist(Create_Request: Create_Request):
    year, month, day = map(int, Create_Request.dead_line.split("."))

    request_data = { 
                    "request_date": datetime.datetime.now()
                    }
    
    db.tech.insert_one(request_data)
    return json.loads(dumps(request_data))