Python을 사용하여 NoSQL용 Azure Cosmos DB에서 컨테이너 만들기

적용 대상: 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 만듭니다. 이 메서드는 동일한 이름의 컨테이너가 이미 있는 경우 예외를 throw합니다.

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 메서드와 비교하여 데이터베이스가 이미 있는 경우 이 메서드는 예외를 throw하지 않습니다. 이 메서드는 동일한 코드를 여러 번 실행하는 경우 오류를 방지하는 데 유용합니다.

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 메서드를 사용합니다.

비동기적으로 작업하는 것은 여러 작업을 병렬로 수행하려는 경우에 유용합니다. 자세한 내용은 비동기 클라이언트 사용을 참조하세요.

응답 구문 분석

위의 예제에서 요청의 응답은 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"]}')

다음 단계

이제 컨테이너를 만들았으므로 다음 가이드를 사용하여 항목을 만듭니다.