내가 해결한 방법 : api로 받아온 json 파일의 스펠링을 1)스키마와
2)몽고디비에 추가하는 함수에 들어갈 변수와 일치시켜야 한다.
몽고디비를 사용한 이유가 json 파일 자체를 간편하게 추가할 수 있다는 장점 때문이었는데,
ORM 방식으로 몽고디비를 사용하기 위해서는 결국 노가다로 변수를 넣어주어야 했다...
내가 사용한 데이터는 restAPI 사이트에서 키를 발급받아 받아온 IMDb 데이터로,
json 파일에 key가 대문자로 들어있었다.
# 주의 : 무조건 소문자가 아니라 json 파일과 일치하도록 key값의 대소문자를 넣어야 합니다.
class Movie(db.Document):
title = db.StringField()
year = db.IntField()
rated = db.StringField() # 관람등급
released = db.StringField()
runtime = db.IntField()
genre = db.StringField()
genre1 = db.StringField()
director = db.StringField()
writer = db.StringField()
actors = db.StringField()
plot = db.StringField()
language = db.StringField()
보통 스키마는 소문자로 작성하길래
소문자로 작성했더니 Postman에서 제대로 데이터가 추가되지 않았다.
class Movie(db.Document):
imdbID = db.StringField() # primary key?
Title = db.StringField()
Year = db.IntField()
Rated = db.StringField() # 관람등급
Released = db.StringField()
Runtime = db.StringField()
Genre = db.StringField()
Genre1 = db.StringField()
Director = db.StringField()
Writer = db.StringField()
Actors = db.StringField()
Plot = db.StringField()
Language = db.StringField()
Country = db.StringField()
Awards = db.StringField()
Poster = db.StringField()
Ratings = db.ListField(db.DictField()) #db.EmbeddedDocumentListField(Ratings)
Metascore = db.StringField()
RottenTomatoes = db.StringField()
imdbRating = db.FloatField()
imdbVotes = db.StringField()
BoxOffice = db.StringField()
Production = db.StringField()
keywords = db.ListField()
meta = {'strict': False} #ignoring this error when having extra fields while data loading
그래서 대문자로 바꿨더니 잘 동작하는 거 같았지만... NotUniqueError가 일어나고 데이터베이스에 Document(개별 영화의 json 파일) 하나밖에 안 남길래 다시 다 소문자로 바꿨다. (삽질의 시작 - 따라하지 마시오)
그리고 내가 따로 기준을 두어 필터링한 영화 데이터가 900개 가량 되어 json 파일로 몽고디비에 한 번에 추가했는데,
몽고디비에 있는 json 파일(key가 대문자로 시작) <-> Flask-mongoengine으로 추가한 파일(스키마 때문에 key가 다 소문자가 됨) 이 같게 인식되지 않아,
- 몽고디비에서 제대로 조회가 되지 않고
- 몽고디비에서 json으로 한 번에 추가한 데이터는 flask-mongoengine 쿼리로 제대로 조회되지 않았다.
(title : "델마와 루이스") 을 해봤자 실제 데이터에는 (Title : "델마와 루이스") 로 들어가 있었기 때문.
스키마를 싹 갈아엎으니 postman, 몽고디비 둘 다 조회가 잘 되고 추가도 잘 된다!!
'개발 > Flask, Fastapi' 카테고리의 다른 글
Fastapi heroku 배포하기 (0) | 2021.06.10 |
---|---|
heroku 로딩 속도 느린 현상 해결하기(non sleep) (0) | 2021.05.16 |
mongoengine NotUniqueError (0) | 2021.03.26 |
Flask 로 MongoDB Atlas 데이터베이스와 연동하기 (0) | 2021.03.26 |
mongodump 없이 Mongocb Collection 백업하고 복사하기 (0) | 2021.03.26 |