Docs Home → 애플리케이션 개발 → Python 드라이버 → PyMongo
PyMongo 버전 업그레이드
이 페이지의 내용
개요
이 페이지에서는 새 버전의 PyMongo로 업그레이드할 때 애플리케이션을 변경해야 하는 경우에 대해 설명합니다.
중요
이 가이드에는 v4.0 이후의 PyMongo 버전에 대한 호환성이 손상되는 변경만 포함되어 있습니다. PyMongo v2 또는 v 에서 업그레이드하는3 경우 PyMongo 4 마이그레이션 가이드를 참조하세요.
업그레이드하기 전에 다음 작업을 수행하세요:
새 PyMongo 버전이 애플리케이션 이 연결되는 MongoDB Server 버전 및 애플리케이션 이 실행되는 Python 버전과 호환되는지 확인합니다. 버전 호환성 정보는 PyMongo 호환성 페이지를 참조하세요.
호환성이 손상되는 변경 섹션에서 애플리케이션에서 사용 중인 드라이버 버전과 업그레이드 예정 버전 간의 호환성이 손상되는 변경을 해결하세요.
팁
향후 운전자 버전을 업그레이드할 때 애플리케이션 에 필요한 변경 사항의 수를 최소화하려면 Stable API 를 사용합니다.
사용 중단 경고 표시
더 이상 사용되지 않는 PyMongo 기능을 사용하는 경우 드라이버는 DeprecationWarning
을(를) 발생시킵니다. 기본적으로 Python 인터프리터는 이러한 경고를 무음으로 설정합니다. stderr
에 출력하려면 -Wd
옵션으로 Python을 시작합니다.
다음 예제에서는 더 이상 사용되지 않는 메서드를 호출하는 Python 애플리케이션인 insert.py
를 실행합니다. Python이 -Wd
옵션으로 시작되었기 때문에 인터프리터에 DeprecationWarning
가 표시됩니다.
$ python3 -Wd insert.py insert.py:4: DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead. client.test.test.insert({})
DeprecationWarning
메시지를 예외로 처리하려면 다음 예와 같이 대신 -We
옵션을 사용하여 Python을 시작합니다.
$ python3 -We insert.py Traceback (most recent call last): File "insert.py", line 4, in <module> client.test.test.insert({}) File "/home/durin/work/mongo-python-driver/pymongo/collection.py", line 2906, in insert "instead.", DeprecationWarning, stacklevel=2) DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
호환성이 손상되는 변경
호환성이 손상되는 변경은 드라이버의 특정 버전에서 시작되는 규칙 또는 동작의 변경입니다. 이러한 유형의 변경으로 인해 드라이버를 업그레이드하기 전에 해결하지 않으면 애플리케이션이 제대로 작동하지 않을 수 있습니다.
이 섹션의 호환성이 손상되는 변경은 이를 도입한 드라이버 버전별로 분류됩니다. 드라이버 버전을 업그레이드할 때 현재 버전과 업그레이드 버전 간의 호환성이 손상되는 변경을 모두 해소합니다.
예시
버전 4.0에서 업그레이드
PyMongo를 v4.0 에서 v4.7 로 업그레이드하는 경우 4.1 ~ 4.7 버전에 대해 나열된 모든 호환성이 손상되는 변경(있는 경우)을 해결합니다.
버전 4.7 호환성이 손상되는 변경
모든 내부 클래스 및 명령에 대한
SON
컬렉션 유형의 모든 항목이dict
로 변경되었습니다.options.pool_options.metadata
속성은 이제SON
dict
유형입니다. 다음 코드 예시는 이러한 형식이 데이터를 저장하는 방식의 차이점을 보여줍니다.
# Before (SON) from pymongo import MongoClient client = MongoClient() client.options.pool_options.metadataSON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')]) # After (dict) client.options.pool_options.metadata{'driver': {'name': 'PyMongo', 'version': '4.7.0.dev0'}, 'os': {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}, 'platform': 'CPython 3.11.6.final.0'}
단일 계층 dict
객체를 SON
객체로 변환하려면 다음 예제와 같이 dict
객체를 SON
생성자에 전달합니다.
data_as_dict = client.options.pool_options.metadata SON(data_as_dict)SON([('driver', {'name': 'PyMongo', 'version': '4.7.0.dev0'}), ('os', {'type': 'Darwin', 'name': 'Darwin', 'architecture': 'arm64', 'version': '14.3'}), ('platform', 'CPython 3.11.6.final.0')])
dict
객체에 여러 레이어가 있는 경우 다음 예제와 같이 값을 한 번에 하나씩 변환해야 합니다.
def dict_to_SON(data_as_dict: dict[Any, Any]): data_as_SON = SON()for key, value in data_as_dict.items(): if isinstance(value, dict) else value data_as_SON[key] = dict_to_SON(value) return data_as_SON >>> dict_to_SON(data_as_dict)SON([('driver', SON([('name', 'PyMongo'), ('version', '4.7.0.dev0')])), ('os', SON([('type', 'Darwin'), ('name', 'Darwin'), ('architecture', 'arm64'), ('version', '14.3')])), ('platform', 'CPython 3.11.6.final.0')])
버전 4.2 호환성이 손상되는 변경
Pyright 에 대한 지원을 개선하려면 도구부터
ClientSession
클래스는 더 이상 일반 입력을 사용하지 않습니다.클라이언트 측 필드 레벨 암호화(CSFLE)에는 pymongocrypt v1.3.0 이상이 필요합니다.
BSON, PyMongo 및 gridfs 패키지는 이제
__all__
변수를 사용하여 공개 API를 선언합니다. 애플리케이션에from bson import *
문이 포함된 경우 여전히 필요한 API를 가져오는지 확인합니다.estimated_document_count()
메서드는 항상 count 명령을 사용합니다. 이 명령은 MongoDB 버전 5.0.0 의 Stable API에서 사용할 수 없습니다. 통해 5.0.8. Stable API와 함께estimated_document_count()
메서드를 사용하는 경우 MongoDB Server v5.0 로 업그레이드해야 합니다.9 이상이거나pymongo.server_api.ServerApi.strict
옵션을False
로 설정합니다.