適用対象:
Mongodb
Important
既存の MongoDB アプリケーションを移行するか、MongoDB クエリ言語 (MQL) 機能を使用しますか? Azure DocumentDB について考えてみましょう。
99.999% 可用性サービス レベル アグリーメント (SLA)、インスタント 自動スケール、および複数のリージョン間の自動フェールオーバーを使用した 大規模 なシナリオ向けのデータベース ソリューションをお探しですか? Azure Cosmos DB for NoSQL について考えてみましょう。
この記事では、PyMongo ドライバー パッケージを使って Azure Cosmos DB for MongoDB に接続する方法について説明します。 接続すると、データベース、コレクション、ドキュメントに対する操作を実行できます。
注記
コード スニペットの例は、Python プロジェクトとして GitHub 上で使用できます。
この記事では、Python 用のオープンソース MongoDB クライアント ドライバーの 1 つである PyMongo を使用して、Azure Cosmos DB の MongoDB 用 API と通信する方法について説明します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Python 3.8以上
- Azure コマンド ライン インターフェイス (CLI) または Azure PowerShell
- Azure Cosmos DB for MongoDB のリソース
新しい Python アプリを作成する
任意のターミナルを使用して新しい空のフォルダーを作成し、ディレクトリをそのフォルダーに変更します。
注記
完成したコードが必要な場合は、完全な例を含むサンプル コード スニペット リポジトリをダウンロードまたはフォークして複製します。 また、Azure Cloud Shell のリポジトリで
git cloneを実行して、このクイックスタートに示されているステップに従うこともできます。PyMongo パッケージと python-dotenv パッケージが一覧表示される requirements.txt ファイルを作成します。
dotenvパッケージは、ローカルでの開発中に.envファイルから環境変数を読み取るために使用されます。# requirements.txt pymongo python-dotenv仮想環境を作成し、パッケージをインストールします。
# py -3 uses the global python interpreter. You can also use python3 -m venv .venv. py -3 -m venv .venv source .venv/Scripts/activate pip install -r requirements.txt
PyMongo ドライバーを使用して Azure Cosmos DB for MongoDB に接続する
PyMongo ドライバーを使用して Azure Cosmos DB に接続するには、MongoClient オブジェクトのインスタンスを作成します。 このクラスは、データベースに対するすべての操作を実行するための開始点です。
MongoClient の最も一般的なコンストラクターには host パラメーターだけが必要で、この記事では COSMOS_CONNECTION_STRING 環境変数に設定されています。 コンストラクターで使用できるオプション パラメーターとキーワード パラメーターは他にもあります。 オプション パラメーターの多くは、host パラメーターと共に指定することもできます。 この同じオプションを host と共にパラメーターとして渡すと、このパラメーターが優先されます。
接続の問題については、トラブルシューティング ガイドに関する記事をご覧ください。
リソースの名前を取得する
以下のコマンドでは、リソース グループ名を msdocs-cosmos にしています。 状況に応じて名前を変更してください。
resourceGroupName のシェル変数を作成します。
# Variable for resource group name resourceGroupName="msdocs-cosmos"az cosmosdb listコマンドを使用して、リソース グループ内の最初の Azure Cosmos DB アカウントの名前を取得し、それを accountName シェル変数に格納します。# Retrieve most recently created account name accountName=$( az cosmosdb list \ --resource-group $resourceGroupName \ --query "[0].name" \ --output tsv )
接続文字列の取得
コマンドを使って、アカウントの接続文字列の一覧から MongoDB 用 API の
az cosmosdb keys listを見つけます。az cosmosdb keys list --type connection-strings \ --resource-group $resourceGroupName \ --name $accountName"主キー" の値を記録します。 これらの資格情報を後で使用します。
環境変数を構成する
コード内で接続文字列の値を使用するには、アプリケーションを実行しているローカル環境でこの値を設定します。 環境変数を設定するには、任意のターミナルを使用して次のコマンドを実行します。
$env:COSMOS_CONNECTION_STRING = "<cosmos-connection-string>"
接続文字列を使用して MongoClient を作成する
PyMongo と python-dotenv のパッケージを参照する従属関係を追加します。
import os import sys import pymongo from dotenv import load_dotenvコンストラクターと、環境変数から読み取られた接続文字列を使って、
MongoClientクラスの新しいインスタンスを定義します。load_dotenv() CONNECTION_STRING = os.environ.get("COSMOS_CONNECTION_STRING") client = pymongo.MongoClient(CONNECTION_STRING) for prop, value in vars(client.options).items(): print("Property: {}: Value: {} ".format(prop, value))
MongoClient インスタンスを作成するさまざまな方法の詳細については、「MongoClient を使用した接続の作成」を参照してください。
MongoClient 接続を閉じる
アプリケーションが接続を終了したら、必ず閉じてください。 すべてのデータベース呼び出しが行われた後で、.close() を呼び出す必要があります。
client.close()
MongoDB 用 API 向けの Azure Cosmos DB で MongoDB クライアント クラスを使う
アプリケーションのビルドを開始する前に、Azure Cosmos DB のリソースの階層について説明します。 Azure Cosmos DB には、リソースの作成とアクセスに使用される特定のオブジェクト モデルがあります。 Azure Cosmos DB によって、アカウント、データベース、コレクション、ドキュメントで構成される階層内にリソースが作成されます。
上部に Azure Cosmos DB for MongoDB アカウントを示す階層構造。 アカウントには 2 つの子データベース ノードがあります。 一方のデータベース ノードには、2 つの子コレクション ノードが含まれています。 もう一方のデータベース ノードには、1 つの子コレクション ノードが含まれています。 その 1 つのコレクション ノードには、3 つの子ドキュメント ノードがあります。
各種類のリソースは、1 つまたは複数の関連付けられた Python クラスによって表されます。 以下に最も一般的なクラスの一覧を示します。
MongoClient - PyMongo を使用する最初のステップは、Azure Cosmos DB の MongoDB 用 API に接続する MongoClient を作成することです。 このクライアント オブジェクトは、サービスに対する要求の構成と実行に使用されます。
データベース - Azure Cosmos DB の MongoDB 用 API では、1 つ以上の独立したデータベースをサポートできます。
コレクション - データベースには 1 つまたは複数のコレクションを格納できます。 コレクションは MongoDB に格納されているドキュメントのグループであり、リレーショナル データベースのテーブルとほぼ同等と考えられます。
ドキュメント - ドキュメントはキーと値のペアのセットです。 ドキュメントには動的スキーマがあります。 動的スキーマとは、同じコレクション内のドキュメントに同じフィールドまたは構造のセットが必要ないことを意味します。 また、コレクションのドキュメント内の共通フィールドには、さまざまな種類のデータが含まれている場合があります。
エンティティの階層について詳しくは、「Azure Cosmos DB リソース モデル」の記事を参照してください。
関連項目
次のステップ
MongoDB 用 API アカウントに接続したので、次のガイドを使用してデータベースを作成および管理します。