Overview
このページでは、PyMongo を操作するための一般的なサードパーティ ライブラリについて説明します。 Motor を除くすべてのライブラリはコミュニティによって管理されています。 このリストを最新に保つために、最近更新されていないプロジェクトは時々リストから削除されるか、末尾に移動されます。
Tip
これらのライブラリは役立つ場合がありますが、新しい PyMongo ユーザーは、ドライバーを直接操作することで開始することをお勧めします。 PyMongo のみがほとんどのユーザーのニーズを満たします。PyMongo との連携は MongoDB の動作に影響します。
ORM のようなレイヤー
ORM のような(オブジェクト関係のマッピングのような)レイヤーは、PyMongo にモデルや検証などの機能を追加します。
MincePy は、任意のPythonオブジェクトをMongoDBデータベースに保存およびクエリ可能にするように設計されたオブジェクト ドキュメント マッパー(ODM)です。これは、機械学習と大規模な計算および実験的なアプリケーションを念頭に置いて設計されています。ただし、これは完全に一般的なものであり、現在のワークフローを可能な限り変更せずに大量のデータを整理、共有、または処理したいユーザーには役立ちます。
Ming は、 Pythonアプリケーション内のMongoDBデータベースにスキーマを強制できるライブラリです。これは、 MongoDBへの移行中に SourceForge によって開発されました。詳細については、 紹介ブログ記事 を参照してください。
MongoEngine では、Diango ORM に影響を与えた構文を使用して、ドキュメントとクエリ コレクションのスキーマを定義できます。このコードは GitHub で利用できます。
MotorEngine は、 MongoEngine のMotorへのポートであり、Tornado との非同期アクセスを可能にします。同じモデリング API をデータ互換性のある方法で実装しているため、MongoEngine で定義されたモデルは MotorEngine で読み取ることができます。ソースは GitHub で利用可能です。
uMongo は、非同期 ODM がないこと、および他の ODM でドキュメントを直列化するのが困難であるという 2 つのニーズを満たすために作成されたPython MongoDB ODM です。 uMongo は、 PyMongo、TxMongo、 Motor_asyncio、および mongomock などの複数のドライバーで動作します。ソースは GitHub で利用可能です。
フレームワーク ツール
このセクションでは、さまざまな Python フレームワークとライブラリで動作するように設計されたツールとアダプターを一覧表示します。
Django
公式の Diango MongoDBバックエンド を使用して、Diango アプリケーションのデータベースとしてMongoDBを使用できます。Dlango MongoDBバックエンドは、 PyMongoを使用してMongoDBに接続する Dlangoデータベースのバックエンドです。バックエンドを使用すると、Dango モデルを使用してMongoDBドキュメントを表現し、 Dpango 形式、検証、認証をサポートできます。Dlango MongoDBバックエンドを使用すると、集計操作やインデックスなどのアプリケーションでMongoDB固有のクエリの最適化も使用できます。
重要
パブリック プレビュー
Dmango MongoDBバックエンド はパブリック プレビューで、評価目的のみを目的としています。 重大な変更が導入される可能性があるため、パブリック プレビューは本番環境の配置には推奨されません。
Flask
[Flask-MongoAlchemy] は、MongoAlchemy を持つMongoDBの [Flask] サポートを追加します。
Flusk-MongoKit は、MongoKit を Flusk により適切に統合するための Flusk 拡張機能です。
フラグ - PyMongoは、フラグメントとPyMongo を接続します。
その他のツール
フルスタック FastAPI アプリ ジェネレーターを使用すると、FastAPI、 React、 MongoDBを統合するフルスタックアプリケーションをすばやく起動できます。
Log4 Mongo は、通常のコレクションと Capped コレクションを使用してMongoDBにログを保存できる柔軟なPythonロギング ハンドラーです。
mongobox は、 Pythonアプリ内からサンドボックス化されたMongoDBインスタンスを実行するためのツールです。
mongodb_beeker を使用すると、 MongoDB をBearer のキャッシュとセッション システムのバックエンドとして使用できます。ソースは GitHub にあります。
MongoLog は、 Cappedコレクションを使用してMongoDBにログを保存するPythonロギング ハンドラーです。
rust .rate mongodb は、 MongoDBをダウンロードしてインストールするためのビルドアウト レシピです。
相互運用性ツール
このセクションでは、他のツールとの相互作用をサポートするツールを一覧にしています。
gevent
PyMongo はPython標準ライブラリのスレッド関数とソケット関数を使用します。 getevent を使用することで、 PyMongo は非ブロッキングソケットを使用して非同期 I/O を実行し、スレッドではなくgreenlets でスケジュール操作を実行できます。
PyMongoで gemmonkey.patch_all()
を使用するには、次の例に示すように、他のモジュールをロードする前に、get の メソッドを呼び出します。
# You must call patch_all() *before* importing any other modules from gevent import monkey _ = monkey.patch_all() from pymongo import MongoClient client = MongoClient()
重要
ブロッキングを回避するために MongoClient を閉じます
アプリケーションの起動時にmonkey.patch_all()
を呼び出すと、 MongoClient
はスレッドではなく「greenlets」を使用してサーバーの健全性を監視します。 シャットダウン時に、アプリケーションが最初にこれらのgreenlets を終了せずに~gevent.hub.Hub.join()
メソッドを呼び出すと、 ~gevent.hub.Hub.join()
メソッドへの呼び出しは無期限にブロックされます。
これを回避するには、アプリケーションを終了する前に、アクティブなMongoClient
オブジェクトを閉じるか、廃止します。 一部のアプリケーション フレームワークでは、次の例に示すように、アプリケーションがSIGHUP
を受信したときに シグナル ハンドラーを使用してバックグラウンド グレットを終了できます。
import signal def graceful_reload(signum, traceback): """Explicitly close some global MongoClient object.""" client.close() signal.signal(signal.SIGHUP, graceful_reload)
この問題は、 より前の null1.9.16 バージョン、または オプションを持つそれ以降の-gevent-wait-for-hub
u詳しくは、「 uAWSI の変更ログ 」を参照してください。
Mod_wsgi
Mod_wsgiパッケージは、 Apache Webサーバー上で Python ベースの Web アプリケーションをホストするための AWSI 準拠のインターフェースを実装するApacheモジュールを提供します。
Mod_wsgi で PyMongo アプリケーションを実行するには、次のガイドラインに従います。
Mod_wsgi をデーモン モードで実行するには、
WSGIDaemonProcess
ディレクティブを使用します。 Mod_wsgi 構成にWSGIScriptAlias
ディレクティブのみが含まれている場合は、埋め込みモードで実行されます。WSGIApplicationGroup %{GLOBAL}
ディレクティブを使用して、アプリケーションがサブインタープリターではなく、デーモンのメインの Python インタープリターで実行されるようにします。 これにより、サブインタープリターで BSON をデコードする際に発生するわずかなコストを回避できます。WSGIProcessGroup
ディレクティブを使用して、各アプリケーションを個別のデーモンに割り当てます。 これにより、アプリケーションは相互の状態に影響を与えないようになります。
以下の Mod_wsgi 構成は、前述のディレクティブを使用して PyMongo アプリケーションを実行する方法を示しています。
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi WSGIProcessGroup my_process WSGIApplicationGroup %{GLOBAL} </VirtualHost>
PyMongo アプリケーションが複数ある場合は、それぞれをグローバル アプリケーション グループの個別のデーモンに配置します。
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi <Location /my_app> WSGIProcessGroup my_process </Location> WSGIDaemonProcess my_other_process WSGIScriptAlias /my_other_app /path/to/other_app.wsgi <Location /my_other_app> WSGIProcessGroup my_other_process </Location> WSGIApplicationGroup %{GLOBAL} </VirtualHost>
注意
多くのPython C拡張機能は、複数のPythonサブインタープリタで実行中際に問題があります。これらの問題は、Py_NewInterpreter のドキュメントと、mod_wsgi ドキュメントの「複数のPythonサブ インタープリタ 」セクションで説明されています。
タイプ チェッカー
型のヒントを使用してコード内のエラーを検出できるツールのリストについては、 typing
モジュールのドキュメントの「 Pythonによる静的型指定 」を参照してください。
注意
ジェネリックドキュメントタイプのデフォルト値は Mypy ではまだ使用できません。この問題の原因となった Mypy の制限の詳細については、 Mypy GitHubリポジトリ を参照してください。
Mypy を使用しており、提供された型の使用をオプトアウトする場合は、 Mypy構成ファイルに次の行を追加します。
[mypy-pymongo] follow_imports = False
代替の Python ドライバー
このセクションでは、PyMongo の代替手段を一覧表示します。
Motor は、 Python Tornado アプリケーション用のフル機能の非ブロッキングMongoDBドライバーです。
TxMongo は、 MongoDB用の非同期Pythonドライバーです。
MongoMock は、 Pythonコードのテストに役立つ小さなライブラリです。 PyMongoを使用してMongoDB.
注意
PyMongoは PythonAnywhere と非互換性があります
PyMongo はPythonスレッドを作成しますが、PythonAnywhere はサポートしていないです。
詳細については、関連する Jiraチケットを参照してください。