Azure Cosmos DB for MongoDB と Python を使ってみる
適用対象: MongoDB
この記事では、PyMongo ドライバー パッケージを使って Azure Cosmos DB for MongoDB に接続する方法について説明します。 接続すると、データベース、コレクション、ドキュメントに対する操作を実行できます。
Note
コード スニペットの例は、Python プロジェクトとして GitHub 上で使用できます。
この記事では、Python 用のオープンソース MongoDB クライアント ドライバーの 1 つである PyMongo を使用して、Azure Cosmos DB の MongoDB 用 API と通信する方法について説明します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- python=3.8.10
- Azure コマンド ライン インターフェイス (CLI) または Azure PowerShell
- Azure Cosmos DB for MongoDB のリソース
新しい Python アプリを作成する
任意のターミナルを使用して新しい空のフォルダーを作成し、ディレクトリをそのフォルダーに変更します。
Note
完成したコードが必要な場合は、完全な例を含むサンプル コード スニペット リポジトリをダウンロードまたはフォークして複製します。 また、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 )
接続文字列の取得
az cosmosdb keys list
コマンドを使って、アカウントの接続文字列の一覧から MongoDB 用 API の接続文字列を見つけます。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 の DB アカウントを示す階層図。 アカウントには 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 アカウントに接続したので、次のガイドを使用してデータベースを作成および管理します。