Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍如何使用 Python SDK 连接到 Azure Cosmos DB for NoSQL。 连接后,对数据库、容器和项执行作。
包 (PyPi) | API 参考 | 库源代码 | 提供反馈
先决条件
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- Azure Cosmos DB for NoSQL 帐户。 了解如何 为 NoSQL 帐户创建 API。
- Python 3.7 或更高版本。
- Azure Command-Line 接口(CLI) 或 Azure PowerShell。
设置项目
为 Python 代码创建环境。
使用 虚拟环境 以隔离方式安装 Python 包,而不会影响系统。
在虚拟环境中安装 Azure Cosmos DB for NoSQL Python SDK。
pip install azure-cosmos
创建 Python 应用程序
在你的环境中,创建新的 app.py 文件并添加以下代码:
"""Sample showing how to connect with endpoint and key."""
# <imports>
import json
import os
import sys
import uuid
from azure.core.exceptions import AzureError
from azure.cosmos import CosmosClient, PartitionKey
# </imports>
DATABASE_ID = "cosmicworks"
CONTAINER_ID = "products"
# <client>
ENDPOINT = os.environ["COSMOS_ENDPOINT"]
KEY = os.environ["COSMOS_KEY"]
client = CosmosClient(url=ENDPOINT, credential=KEY)
# </client>
def main():
"""How to CosmosDB and NoSQL samples."""
try:
# Create database and partition key.
database = client.create_database_if_not_exists(id=DATABASE_ID)
# Create a container.
partition_key_path = PartitionKey(path="/categoryId")
container = database.create_container_if_not_exists(
id=CONTAINER_ID,
partition_key=partition_key_path,
offer_throughput=400,
)
# Create a new item.
new_guid = str(uuid.uuid4())
new_item = {
"id": new_guid,
"categoryId": "61dba35b-4f02-45c5-b648-c6badc0cbd79",
"categoryName": "gear-surf-surfboards",
"name": "Yamba Surfboard",
"quantity": 12,
"sale": False,
}
container.create_item(new_item)
# Query items.
sql_stmt = "SELECT * FROM products p WHERE p.categoryId = @categoryId"
category_id = "61dba35b-4f02-45c5-b648-c6badc0cbd79"
params = [dict(name="@categoryId", value=category_id)]
items = container.query_items(
query=sql_stmt,
parameters=params,
enable_cross_partition_query=False,
)
for item in items:
print(json.dumps(item, indent=True))
except AzureError as err:
sys.exit("Error:" + str(err))
if __name__ == "__main__":
main()
前面的代码导入本文其余部分使用的模块。
连接到 Azure Cosmos DB for NoSQL
若要连接到 Azure Cosmos DB API for NoSQL,请创建类的 CosmosClient
实例。 此类是针对数据库执行所有操作的起点。
若要使用 Microsoft Entra 连接到 NoSQL 帐户的 API,请使用安全主体。 主体的确切类型取决于托管应用程序代码的位置。 下表是快速参考指南。
应用程序的运行位置 | 安全主体 |
---|---|
本地计算机(开发和测试) | 用户标识或服务主体 |
蔚蓝 | 托管标识 |
Azure 外部的服务器或客户端 | 服务主体 |
导入 Azure.Identity
该 azure-identity
包提供在所有 Azure SDK 库之间共享的核心身份验证功能。
将 azure-identity
包导入环境。
pip install azure-identity
使用默认凭据实现创建 CosmosClient
如果要在本地计算机上进行测试或在具有托管标识支持的 Azure 服务上运行应用程序,请通过创建 DefaultAzureCredential
实例来获取 OAuth 令牌。
在 app.py 文件中:
获取帐户的终结点,并将其设置为环境变量
COSMOS_ENDPOINT
。导入 DefaultAzureCredential 并创建它的实例。
使用终结点和凭据作为参数创建 CosmosClient 类的新实例。
"""Sample showing how to connect with AAD."""
import json
import os
import sys
import uuid
from azure.core.exceptions import AzureError
from azure.cosmos import CosmosClient
# <credential>
from azure.identity import DefaultAzureCredential
ENDPOINT = os.environ["COSMOS_ENDPOINT"]
credential = DefaultAzureCredential()
client = CosmosClient(ENDPOINT, credential)
# </credential>
DATABASE_ID = "cosmicworks"
CONTAINER_ID = "products"
def main():
"""How to CosmosDB and NoSQL samples."""
try:
# Get database.
database = client.get_database_client(DATABASE_ID)
# Get container.
container = database.get_container_client(CONTAINER_ID)
print("Container info: " + str(container.read()))
# Create a new item.
new_guid = str(uuid.uuid4())
new_item = {
"id": new_guid,
"categoryId": "61dba35b-4f02-45c5-b648-c6badc0cbd79",
"categoryName": "gear-surf-surfboards",
"name": "Yamba Surfboard",
"quantity": 12,
"sale": False,
}
container.create_item(new_item)
# Query items.
sql_stmt = "SELECT * FROM products p WHERE p.categoryId = @categoryId"
category_id = "61dba35b-4f02-45c5-b648-c6badc0cbd79"
params = [dict(name="@categoryId", value=category_id)]
items = container.query_items(
query=sql_stmt,
parameters=params,
enable_cross_partition_query=False,
)
for item in items:
print(json.dumps(item, indent=True))
except AzureError as err:
sys.exit("Error:" + str(err))
if __name__ == "__main__":
main()
重要
有关添加要启用 DefaultAzureCredential
的正确角色的详细信息,请参阅 使用 Azure Cosmos DB 帐户的 Microsoft Entra ID 配置基于角色的访问控制。 具体而言,请参阅有关创建角色并将其分配到主体 ID 的部分。
生成应用程序
生成应用程序时,代码主要与四种类型的资源进行交互:
API for NoSQL 帐户,它是 Azure Cosmos DB 数据的唯一顶级命名空间。
数据库,它用于组织帐户中的容器。
容器,它包含数据库中的一组单个项。
项,它表示容器中的 JSON 文档。
此图显示了这些资源之间的关系。
顶部是显示 Azure Cosmos DB 帐户的层次结构示意图。 该帐户包含两个子数据库节点。 其中一个数据库节点包含两个子容器节点。 另一个数据库节点包含单个子容器节点。 该容器节点包含三个子项节点。
一个或多个关联的 Python 类表示资源类型。 此列表显示用于同步编程的最常见类。 (azure.cosmos.aio 命名空间中有类似的异步编程类。)
类 | 说明 |
---|---|
CosmosClient |
此类为 Azure Cosmos DB 服务提供客户端逻辑表示。 客户端对象配置和执行针对服务的请求。 |
DatabaseProxy |
服务中尚不存在的数据库的接口。 不应直接实例化此类。 请改用 CosmosClient get_database_client 方法。 |
ContainerProxy |
与特定 Cosmos DB 容器交互的接口。 不应直接实例化此类。 请改用 DatabaseProxy get_container_client 方法获取现有容器,或改用 create_container 方法创建新容器。 |
这些指南演示如何使用这些类来生成应用程序。
指南 | 说明 |
---|---|
创建数据库 | 创建数据库。 |
创建容器 | 创建容器。 |