使用 Python 在 Azure Cosmos DB for NoSQL 中创建数据库

适用范围: NoSQL

Azure Cosmos DB 中的数据库是一个或多个容器的管理单元。 必须先创建数据库,然后才能创建或管理容器。

为数据库命名

在 Azure Cosmos DB 中,数据库类似于命名空间。 创建数据库时,数据库名称会形成用于访问数据库资源和任何子资源的 URI 段。

下面是命名数据库时的一些快速规则:

  • 数据库名称长度必须介于 3 到 63 个字符之间
  • 数据库名称只能包含小写字母、数字或短划线 (-) 字符。
  • 数据库名称必须以小写字母或数字开头。

创建后,数据库的 URI 采用以下格式:

https://<cosmos-account-name>.documents.azure.cn/dbs/<database-name>

创建数据库

若要创建数据库,请调用以下方法之一:

创建数据库

以下示例使用 CosmosClient.create_database 方法创建一个数据库。 如果已存在同名数据库,此方法会引发异常。

"""Sample showing how to connect with endpoint and key."""
import os

from azure.cosmos import CosmosClient
from azure.cosmos.exceptions import CosmosResourceExistsError

DATABASE_ID = "cosmicworks-1"
CONTAINER_ID = "products"
ENDPOINT = os.environ["COSMOS_ENDPOINT"]
KEY = os.environ["COSMOS_KEY"]

client = CosmosClient(url=ENDPOINT, credential=KEY)


def main():
    """How to CosmosDB and NoSQL samples."""
    # <create_database>
    try:
        database = client.create_database(id=DATABASE_ID)
        print(f"Database created: {database.id}")

    except CosmosResourceExistsError:
        print("Database already exists.")
    # </create_database>


if __name__ == "__main__":
    main()

创建一个数据库(如果不存在)

以下示例使用 CosmosClient.create_database_if_not_exists 方法创建一个数据库。 如果数据库存在,此方法将返回数据库设置。 与以前的 create 方法相比,如果数据库已存在,此方法不会引发异常。 如果多次运行同一代码,则此方法对于避免错误非常有用。

"""Sample showing how to connect with endpoint and key."""
import os

from azure.cosmos import CosmosClient
from azure.cosmos.exceptions import CosmosHttpResponseError

DATABASE_ID = "cosmicworks-1"
CONTAINER_ID = "products"
ENDPOINT = os.environ["COSMOS_ENDPOINT"]
KEY = os.environ["COSMOS_KEY"]

client = CosmosClient(url=ENDPOINT, credential=KEY)


def main():
    """How to CosmosDB and NoSQL samples."""
    # <create_database>
    try:
        database = client.create_database_if_not_exists(id=DATABASE_ID)
        print(f"Database created or returned: {database.id}")

    except CosmosHttpResponseError:
        print("Request to the Azure Cosmos database service failed.")
    # </create_database>

    try:
        # <parse_response>
        database = client.create_database_if_not_exists(id=DATABASE_ID)
        for container in database.list_containers():
            print(f'Container name: {container["id"]}')

        # </parse_response>

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


if __name__ == "__main__":
    main()

异步创建数据库

还可以使用 azure.cosmos.aio 命名空间中的类似对象和方法异步创建数据库。 例如,使用 CosmosClient.create_database 方法或 CosmoClient.create_database_if_not_exists 方法。

当你想要并行执行多个操作时,以异步方式工作非常有用。 有关详细信息,请参阅使用异步客户端

分析响应

在上面的示例中,来自请求的响应是 DatabaseProxy,是一个与特定数据库交互的接口。 在代理中,可以访问那些用于对数据库执行操作的方法。

以下示例演示返回 database 对象的 create_database_if_not_exists 方法。

"""Sample showing how to connect with endpoint and key."""
import os

from azure.cosmos import CosmosClient
from azure.cosmos.exceptions import CosmosHttpResponseError

DATABASE_ID = "cosmicworks-1"
CONTAINER_ID = "products"
ENDPOINT = os.environ["COSMOS_ENDPOINT"]
KEY = os.environ["COSMOS_KEY"]

client = CosmosClient(url=ENDPOINT, credential=KEY)


def main():
    """How to CosmosDB and NoSQL samples."""
    # <create_database>
    try:
        database = client.create_database_if_not_exists(id=DATABASE_ID)
        print(f"Database created or returned: {database.id}")

    except CosmosHttpResponseError:
        print("Request to the Azure Cosmos database service failed.")
    # </create_database>

    try:
        # <parse_response>
        database = client.create_database_if_not_exists(id=DATABASE_ID)
        for container in database.list_containers():
            print(f'Container name: {container["id"]}')

        # </parse_response>

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


if __name__ == "__main__":
    main()

后续步骤

创建数据库后,即可按照下一指南来创建容器。