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.11 호환성이 손상되는 변경
MongoDB Server v3.6에 대한 지원 중단합니다. 지원되는 최소 MongoDB Server 버전은 이제 v4.0입니다.
MongoDB Server v4.0에 대한 지원 중단합니다. MongoDB 소프트웨어 수명 주기 일정 에 따라, 예정된 PyMongo 마이너 버전에서는 최소 MongoDB Server 버전이 4.0 에서 으로 상향 4.2 조정됩니다.
Python v3.8에 대한 지원 중단합니다. 지원되는 최소 Python 버전은 이제 v3.9입니다.
PyPy v3.9에 대한 지원 중단합니다. 지원되는 최소 PyPy 버전은 이제 v3.10입니다.
MONGODB-CR
인증 메커니즘 에 대한 지원 중단합니다. 인증 에 대한 자세한 내용은 인증 메커니즘 가이드 참조하세요.
버전 4.9 호환성이 손상되는 변경
애플리케이션 에서 클라이언트 측 필드 레벨 암호화 (CSFLE)를 사용하려면 v 이상을 사용해야 합니다.
pymongocrypt
1.10
버전 4.8 호환성이 손상되는 변경
왜냐하면 PyMongo v4.8
hatch
를 백엔드 빌드 시스템으로 사용하는 경우, 더 이상setup.py
파일 을 사용하여 운전자 를 빌드 할 수 없습니다. 대신 pip를 사용하여 PyMongo 를 설치해야 합니다. 편집 가능한 설치의 경우 pip v21.3 이상을 사용해야 합니다.
버전 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
로 설정합니다.