Python を使用して Azure Cosmos DB for NoSQL にコンテナーを作成する

適用対象: NoSQL

Azure Cosmos DB のコンテナーは、項目のセットを格納します。 アイテムを作成、クエリ、または管理するには、まずコンテナーを作成する必要があります。

コンテナーの名前を指定する

Azure Cosmos DB では、コンテナーはリレーショナル データベース内のテーブルに似ています。 コンテナーを作成すると、コンテナー名によって、コンテナー リソースと子項目へのアクセスに使用される URI のセグメントが形成されます。

コンテナーに名前を付ける場合の簡単な規則を次に示します。

  • コンテナー名の長さは 3 ~ 63 文字にする必要があります。
  • コンテナー名には、小文字、数字、ダッシュ文字のみを含めることができます。
  • コンテナー名は小文字または数字で始まる必要があります

作成されると、コンテナーの URI の形式は次のとおりです。

https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>/colls/<container-name>

コンテナーを作成する

コンテナーを作成するには、次のいずれかのメソッドを呼び出します。

コンテナーを作成する

次の例では、DatabaseProxy.create_container メソッドを使用してコンテナーが作成されます。 同じ名前のコンテナーが既に存在する場合、このメソッドは例外をスローします。

try:
    partition_key_path = PartitionKey(path="/categoryId")
    container = database.create_container(
        id=CONTAINER_ID,
        partition_key=partition_key_path,
        offer_throughput=400,
    )
    print(f"Container created: {container.id}")

except CosmosResourceExistsError:
    print("Container already exists.")

コンテナーがまだ存在しない場合は作成する

次の例では、DatabaseProxy.create_container_if_not_exists メソッドを使用してコンテナーが作成されます。 前の create メソッドと比較すると、データベースが既に存在しても、このメソッドは例外をスローしません。 このメソッドは、同じコードを複数回実行する場合にエラーを回避するのに役立ちます。

try:
    partition_key_path = PartitionKey(path="/categoryId")
    container = database.create_container_if_not_exists(
        id=CONTAINER_ID,
        partition_key=partition_key_path,
        offer_throughput=400,
    )
    print(f"Container created or returned: {container.id}")

except CosmosHttpResponseError:
    print("Request to the Azure Cosmos database service failed.")

コンテナーを非同期的に作成する

azure.cosmos.aio 名前空間で同様のオブジェクトとメソッドを使用して、非同期的にデータベースを作成することもできます。 たとえば、DatabaseProxy.create_database メソッドや CosmoClient.create_database_if_not_exists メソッドを使用します。

非同期的に動作させると、複数の操作を並列で実行するときに便利です。 詳細については、「非同期クライアントの使用」を参照してください。

応答の解析

上記の例では、要求の応答は ContainerProxy です。これは、DB コンテナーと対話するためのインターフェイスです。 プロキシからメソッドにアクセスして、コンテナーに対する操作を実行できます。

次の例は、container オブジェクトを返す create_container_if_not_exists メソッドを示しています。

partition_key_path = PartitionKey(path="/categoryId")
container = database.create_container_if_not_exists(
    id=CONTAINER_ID,
    partition_key=partition_key_path,
    offer_throughput=400,
)
for doc in container.read_all_items(max_item_count=10):
    print(f'Doc id: {doc["id"]}')

次のステップ

コンテナーを作成したので、次のガイドを使用し項目を作成します。