PyMongo のバージョンをアップグレードする
Overview
このページでは、PyMongo の新しいバージョンにアップグレードするときにアプリケーションに加える必要がある変更について説明します。
重要
このガイドには、v 4.0 以降のPyMongoバージョンのみに対する重大な変更が含まれています。PyMongo v2 または v3 からアップグレードする場合は、 PyMongo4 移行ガイド を参照してください。
アップグレードする前に、次のアクションを実行してください。
新しい PyMongo バージョンが、アプリケーションが接続する MongoDB Server のバージョン および アプリケーションを実行する Python バージョンと互換性があることを確認します。 バージョンの互換性情報については、 PyMongo 互換性ページを参照してください。
アプリケーションが使用しているドライバー バージョンとアップグレード予定のバージョンとの間の重大な変更については、重大な変更セクションを参照してください。
Tip
将来ドライバーのバージョンをアップグレードする際にアプリケーションに必要な変更数を最小限に抑えるには、 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 を v 4.0から v 4.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 重大な変更
バージョン 4.8 重大な変更
PyMongo v 4.8のため バックエンド ビルド システムとして
hatch
を使用している場合、setup.py
ファイルを使用してドライバーをビルドすることはできなくなりました。 代わりに、 pip を使用して PyMongo をインストールする必要があります。 編集可能なインストールの場合は、 pip v 21.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
オブジェクトに複数のレイヤーがある場合は、次の例に示すように、値を一度に 1 つずつ変換する必要があります。
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 の重大な変更
Python のサポートを改善するには ツールを使用すると、
ClientSession
クラスはジェネリック型を使用しなくなりました。クライアント側フィールドレベル暗号化(CSFLE)には、pymongocrypt v 1.3.0以降が必要です。
BSON 、 PyMongo 、 Grifs パッケージでは、公開 API を宣言するために
__all__
変数が使用されるようになりました。 アプリケーションにfrom bson import *
ステートメントが含まれている場合は、必要な API が引き続きインポートされていることを確認してください。estimated_document_count()
メソッドは常に count コマンドを使用します。 このコマンドは MongoDB バージョン5.0.0の Stable API では使用できません。 から5.0.8まで。 Stable API でestimated_document_count()
メソッドを使用する場合は、 MongoDB Server v 5.0にアップグレードする 必要があります。 9以降の または 、pymongo.server_api.ServerApi.strict
オプションをFalse
に設定します。