인프런 커뮤니티 질문&답변

gimhansu님의 프로필 이미지
gimhansu

작성한 질문수

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)

FastAPI + MongoDB : MongoDB ODM 셋업

프로젝트 관련질문

작성

·

762

·

수정됨

0

현재 몽고디비에 데이터가 잘들어가는지 확인하기 위해서 odmantic을 설치한 이후로 오류가 떴고

이러한 오류가떴고 확인 해보니
from odmantic import AIOEngine 문제라는 판단으로 pip install --upgrade odamantic을 했지만 별 효과가 없어서 문의하게되었습니다. 추가적으로 하다보니 init.py 이했을떄는 문제없고 mongodb.connect할 때 문제인데 mongodb의 연결문제라고 생각중입니다

 

Process SpawnProcess-1:

Traceback (most recent call last):

  File "C:\Users\hs091\anaconda3\lib\multiprocessing\process.py", line 315, in _bootstrap

    self.run()

  File "C:\Users\hs091\anaconda3\lib\multiprocessing\process.py", line 108, in run

    self._target(*self._args, **self._kwargs)

  File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\_subprocess.py", line 76, in subprocess_started

    target(sockets=sockets)

  File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\server.py", line 61, in run

    return asyncio.run(self.serve(sockets=sockets))

  File "C:\Users\hs091\anaconda3\lib\asyncio\runners.py", line 44, in run

    return loop.run_until_complete(main)

  File "C:\Users\hs091\anaconda3\lib\asyncio\base_events.py", line 642, in run_until_complete

    return future.result()

  File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\server.py", line 68, in serve

    config.load()

  File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\config.py", line 467, in load

    self.loaded_app = import_from_string(self.app)

  File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string

    module = importlib.import_module(module_str)

  File "C:\Users\hs091\anaconda3\lib\importlib\__init__.py", line 127, in import_module

    return bootstrap.gcd_import(name[level:], package, level)

  File "<frozen importlib._bootstrap>", line 1030, in gcdimport

  File "<frozen importlib._bootstrap>", line 1007, in findand_load

  File "<frozen importlib._bootstrap>", line 986, in findand_load_unlocked

  File "<frozen importlib._bootstrap>", line 680, in loadunlocked

  File "<frozen importlib._bootstrap_external>", line 850, in exec_module

  File "<frozen importlib._bootstrap>", line 228, in callwith_frames_removed

  File "C:\Users\hs091\studyDs\teaching-async-python-main\6-실전-프로젝트-콜렉터스\app\main.py", line 5, in <module>

    from app.models import mongodb

  File "C:\Users\hs091\studyDs\teaching-async-python-main\6-실전-프로젝트-콜렉터스\app\models\__init__.py", line 2, in <module>

    from odmantic import AIOEngine

  File "C:\Users\hs091\anaconda3\lib\site-packages\odmantic\__init__.py", line 1, in <module>

    from .bson import ObjectId

  File "C:\Users\hs091\anaconda3\lib\site-packages\odmantic\bson.py", line 11, in <module>

    from pydantic.datetime_parse import parse_datetime

  File "C:\Users\hs091\anaconda3\lib\site-packages\pydantic\_migration.py", line 295, in wrapper

    raise PydanticImportError(f'`{import_path}` has been removed in V2.')

pydantic.errors.PydanticImportError: pydantic.datetime_parse:parse_datetime has been removed in V2.

For further information visit https://errors.pydantic.dev/2.1.1/u/import-error

답변 2

0

odmantic이 pydatnic을 사용하는데 pydantic이 v2로 업데이트 되면서 지원하지 않는 기능을 사용하고 있어 생긴 문제입니다..
아마 fastapi도 pydantic을 사용하는데 v2로 설치된 것 같네요

odmantic 깃헙 이슈에서도 이부분에 대한 지적이 있긴한데.. 가장 빠른 해결책은 pydantic을 다운그레이드 하는 방법입니다.
pip install pydantic == 1.10.10 이렇게 다운그레이드해서 사용하시는게 좋을 것 같네요

그외에도 fastapi를 최신 버전으로 설치하셨다면 @app.on_envet를 지원하지 않습니다..

from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
    logger.info("앱이 시작됩니다.")
    mongoDB.connect()
    await mongoDB.check_connection()

    yield

    logger.info("앱이 종료됩니다.")
    await mongoDB.close()


app = FastAPI()
app.router.lifespan_context = lifespan


이렇게 수정하시면 앱이 시작될 때와 종료될 때 몽고DB의 연결 및 해제를 수행할 수 있을꺼에요..

0

안녕하세요, 인프런 AI 인턴이에요. 프로젝트 관련 질문에 답변 드리겠습니다.

odmantic의 설치와 관련된 오류로 보이는데요, 해당 오류는 대체로 다음과 같은 문제로 인해 발생합니다.

  1. odmantic의 버전 문제: 가장 최신 버전으로 업데이트해도 오류가 지속되는 경우, 버전 호환성 문제일 가능성이 있습니다. odmantic의 버전과 사용 중인 라이브러리, 프레임워크의 버전을 확인해 보세요.
  2. MongoDB 연결 문제: 오류 메시지에서는 mongodb 연결 문제로 언급되는데요, MongoDB 서버가 정상적으로 실행되고 있는지, 연결 정보가 올바른지 확인해야 합니다.

문제의 원인과 해결 방법을 정확히 파악하기 위해서는 보다 자세한 정보가 필요합니다. 다음 사항들을 확인해 보시면 도움이 될 수 있을 것 같아요.

  1. 오류 메시지에 나와 있는 모든 내용을 공유해 주세요. 오류 메시지와 함께 어떤 작업을 수행하고 있는지도 알려주시면 원인 파악에 도움이 될 것입니다.
  2. Python, odmantic, MongoDB의 버전 정보를 알려주세요.
  3. MongoDB에 대한 연결 정보(호스트, 포트, 인증 정보 등)가 올바른지 확인해 주세요.
  4. 만약 다른 라이브러리나 프레임워크를 함께 사용 중이라면, 해당 라이브러리와의 호환성도 확인해 보세요.

추가로, odmantic에 대한 상세한 사용 방법이나 도움이 필요한 부분이 있다면, odmantic의 공식 문서를 참고하시는 것도 좋은 방법이에요. 문제가 계속되거나 더 많은 도움을 받고 싶으시면, odmantic의 개발자 커뮤니티에 질문을 남기는 것도 좋은 방법입니다.

더 나은 답변을 제공하기 위해서는 오류에 대한 추가 정보가 필요합니다. 정확한 원인 파악을 위하여 오류 메시지와 함께 최대한 자세한 상황을 공유해 주세요. 알려진 정보에 따라 도움을 드리고 싶지만, 문제 해결을 위해서는 보다 구체적인 내용이 필요합니다. 재현 가능한 코드 또는 오류가 발생한 부분에 대한 내용도 함께 알려주시면 더욱 도움이 될 수 있어요. 수고하세요!

gimhansu님의 프로필 이미지
gimhansu
질문자

오류는 이게 전부입니다.

INFO: Will watch for changes in these directories: ['C:\\Users\\hs091\\OneDrive\\바탕 화면\\FastAPI']

INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)

INFO: Started reloader process [14892] using WatchFiles

Process SpawnProcess-1:

Traceback (most recent call last):

File "C:\Users\hs091\anaconda3\lib\multiprocessing\process.py", line 315, in _bootstrap

self.run()

File "C:\Users\hs091\anaconda3\lib\multiprocessing\process.py", line 108, in run

self._target(*self._args, **self._kwargs)

File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\_subprocess.py", line 76, in subprocess_started

target(sockets=sockets)

File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\server.py", line 61, in run

return asyncio.run(self.serve(sockets=sockets))

File "C:\Users\hs091\anaconda3\lib\asyncio\runners.py", line 44, in run

return loop.run_until_complete(main)

File "C:\Users\hs091\anaconda3\lib\asyncio\base_events.py", line 642, in run_until_complete

return future.result()

File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\server.py", line 68, in serve

config.load()

File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\config.py", line 467, in load

self.loaded_app = import_from_string(self.app)

File "C:\Users\hs091\anaconda3\lib\site-packages\uvicorn\importer.py", line 21, in import_from_string

module = importlib.import_module(module_str)

File "C:\Users\hs091\anaconda3\lib\importlib\__init__.py", line 127, in import_module

return bootstrap.gcd_import(name[level:], package, level)

File "<frozen importlib._bootstrap>", line 1030, in gcdimport

File "<frozen importlib._bootstrap>", line 1007, in findand_load

File "<frozen importlib._bootstrap>", line 986, in findand_load_unlocked

File "<frozen importlib._bootstrap>", line 680, in loadunlocked

File "<frozen importlib._bootstrap_external>", line 850, in exec_module

File "<frozen importlib._bootstrap>", line 228, in callwith_frames_removed

File "C:\Users\hs091\OneDrive\바탕 화면\FastAPI\app\main.py", line 5, in <module>

from app.models import mongodb

File "C:\Users\hs091\OneDrive\바탕 화면\FastAPI\app\models\__init__.py", line 2, in <module>

from odmantic import AIOEngine

File "C:\Users\hs091\anaconda3\lib\site-packages\odmantic\__init__.py", line 1, in <module>

from .bson import ObjectId

File "C:\Users\hs091\anaconda3\lib\site-packages\odmantic\bson.py", line 11, in <module>

from pydantic.datetime_parse import parse_datetime

File "C:\Users\hs091\anaconda3\lib\site-packages\pydantic\_migration.py", line 295, in wrapper

raise PydanticImportError(f'`{import_path}` has been removed in V2.')

pydantic.errors.PydanticImportError: pydantic.datetime_parse:parse_datetime has been removed in V2.

For further information visit https://errors.pydantic.dev/2.1.1/u/import-error

 

또한 python 버전은 3.9.7

odmantic 버전은 0.9.27

몽고 MongoDBCompass 입니다 mongodb-compass-1.39.0-win32-x64.exe

 

gimhansu님의 프로필 이미지
gimhansu

작성한 질문수

질문하기