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

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

コンテナーに名前を付けます

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

作成されると、コンテナーの 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_container メソッドまたは CosmosClient.create_container_if_not_exists メソッドを使用します。

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

応答の解析

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

次の例は、コンテナー オブジェクトを返す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"]}')