次の方法で共有


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 と通信する方法について説明します。

前提条件

新しい Python アプリを作成する

  1. 任意のターミナルを使用して新しい空のフォルダーを作成し、ディレクトリをそのフォルダーに変更します。

    Note

    完成したコードが必要な場合は、完全な例を含むサンプル コード スニペット リポジトリをダウンロードまたはフォークして複製します。 また、Azure Cloud Shell のリポジトリで git clone を実行して、このクイックスタートに示されているステップに従うこともできます。

  2. PyMongo パッケージと python-dotenv パッケージが一覧表示される requirements.txt ファイルを作成します。 dotenv パッケージは、ローカルでの開発中に .env ファイルから環境変数を読み取るために使用されます。

    # requirements.txt
    pymongo
    python-dotenv
    
  3. 仮想環境を作成し、パッケージをインストールします。

    # 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 にしています。 状況に応じて名前を変更してください。

  1. resourceGroupName のシェル変数を作成します。

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos"
    
  2. 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
    )
    

接続文字列の取得

  1. az cosmosdb keys list コマンドを使って、アカウントの接続文字列の一覧から MongoDB 用 API の接続文字列を見つけます。

    az cosmosdb keys list --type connection-strings \
        --resource-group $resourceGroupName \
        --name $accountName 
    
  2. "主キー" の値を記録します。 これらの資格情報は後で使用します。

環境変数を構成する

コード内で接続文字列の値を使用するには、アプリケーションを実行しているローカル環境でこの値を設定します。 環境変数を設定するには、任意のターミナルを使用して次のコマンドを実行します。

$env:COSMOS_CONNECTION_STRING = "<cosmos-connection-string>"

接続文字列を使用して MongoClient を作成する

  1. PyMongopython-dotenv のパッケージを参照する従属関係を追加します。

    import os
    import sys
    
    import pymongo
    from dotenv import load_dotenv
    
  2. コンストラクターと、環境変数から読み取られた接続文字列を使って、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 階層の図。

上部に 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 アカウントに接続したので、次のガイドを使用してデータベースを作成および管理します。