免責聲明

Python 2.7 的 Azure SDK Python 套件支援已于 2022 年 1 月 1 日結束。 如需詳細資訊和問題,請參閱 https://github.com/Azure/azure-sdk-for-python/issues/20691

適用于 Python 的 Azure Cosmos DB SQL API 用戶端程式庫 - 4.5.1 版

Azure Cosmos DB 是全域散發、多模型資料庫服務,支援文件、索引鍵/值組、寬列資料行及圖形資料庫。

使用適用于 Python 的 Azure Cosmos DB SQL API SDK 來管理資料庫及其包含在此 NoSQL 資料庫服務中的 JSON 檔。 高階功能包括:

  • 建立 Cosmos DB 資料庫 並修改其設定
  • 建立和修改 容器 以儲存 JSON 檔的集合
  • 在容器中建立、讀取、更新和刪除 JSON 檔 (專案)
  • 使用類似 SQL 的語法查詢資料庫中的檔

SDK 原始程式碼 | 套件 (PyPI) | 封裝 (Conda) | API 參考檔 | 產品檔 | 樣品

此 SDK 用於 SQL API。 如需所有其他 API,請參閱 Azure Cosmos DB 檔 ,以評估您專案的最佳 SDK。

開始使用

Python 2.x 支援的重要更新

從 2022 年 1 月 1 日開始,此 SDK 的新版本不再支援 Python 2.x。 請檢查 CHANGELOG 以取得詳細資訊。

必要條件

如果您需要 Cosmos DB SQL API 帳戶,您可以使用此 Azure CLI 命令來建立帳戶:

az cosmosdb create --resource-group <resource-group-name> --name <cosmos-account-name>

安裝套件

pip install azure-cosmos

設定虛擬環境 (選擇性)

如果您使用虛擬環境,則可以讓基底系統與 Azure SDK 環境彼此隔離,但您不一定要這麼做。 執行下列命令來設定,然後使用 venv輸入虛擬環境:

python3 -m venv azure-cosmosdb-sdk-environment
source azure-cosmosdb-sdk-environment/bin/activate

驗證用戶端

與 Cosmos DB 的互動是從 CosmosClient 類別的實例開始。 您需要 帳戶、其 URI和其中一個 帳戶金鑰 ,才能具現化用戶端物件。

使用下列 Azure CLI 程式碼片段,將資料庫帳戶 URI 及其主要金鑰填入兩個環境變數, (您也可以在Azure 入口網站) 中找到這些值。 此程式碼片段會針對 Bash Shell 加以格式化。

RES_GROUP=<resource-group-name>
ACCT_NAME=<cosmos-db-account-name>

export ACCOUNT_URI=$(az cosmosdb show --resource-group $RES_GROUP --name $ACCT_NAME --query documentEndpoint --output tsv)
export ACCOUNT_KEY=$(az cosmosdb list-keys --resource-group $RES_GROUP --name $ACCT_NAME --query primaryMasterKey --output tsv)

建立用戶端

填入 ACCOUNT_URIACCOUNT_KEY 環境變數之後,您可以建立 CosmosClient

from azure.cosmos import CosmosClient

import os
URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)

AAD 驗證

您也可以使用服務主體的 AAD 認證和 Azure 身分識別套件來驗證用戶端。 您可以直接將認證資訊傳遞至 ClientSecretCredential,或使用 DefaultAzureCredential:

from azure.cosmos import CosmosClient
from azure.identity import ClientSecretCredential, DefaultAzureCredential

import os
url = os.environ['ACCOUNT_URI']
tenant_id = os.environ['TENANT_ID']
client_id = os.environ['CLIENT_ID']
client_secret = os.environ['CLIENT_SECRET']

# Using ClientSecretCredential
aad_credentials = ClientSecretCredential(
    tenant_id=tenant_id,
    client_id=client_id,
    client_secret=client_secret)

# Using DefaultAzureCredential (recommended)
aad_credentials = DefaultAzureCredential()

client = CosmosClient(url, aad_credentials)

請務必確定您用於 AAD 驗證的受控識別具有 readMetadata 許可權。
有關如何設定 AAD 驗證的詳細資訊: 設定 AAD 驗證的 RBAC
AAD 已驗證用戶端允許作業的詳細資訊: RBAC 許可權模型

重要概念

當您將 CosmosClient 初始化之後,便能與 Cosmos DB 中的主要資源類型互動:

  • 資料庫:一個 Cosmos DB 帳戶可以包含多個資料庫。 在建立資料庫時,您可以指定在與資料庫內文件互動時想使用的 API:SQL、MongoDB、Gremlin、Cassandra 或 Azure Table。 使用 DatabaseProxy 物件來管理其容器。

  • 容器:容器是 JSON 文件的集合。 您可以使用 ContainerProxy 物件上的方法,在容器中建立 (插入) 、讀取、更新和刪除專案。

  • 專案:專案是儲存在容器中的 JSON 檔的字典標記法。 您新增至容器的每個專案都必須包含索引鍵,其中包含可唯一 id 識別容器內專案的值。

如需這些資源的詳細資訊,請參閱使用 Azure Cosmos 資料庫、容器和項目

如何使用 enable_cross_partition_query

keyword-argument enable_cross_partition_query 接受 2 個選項: None (預設) 或 True

依識別碼使用查詢的注意事項

使用嘗試根據 識別碼 值尋找專案的查詢時,請一律確定您傳入字串類型變數。 Azure Cosmos DB 只允許字串識別碼值,如果您使用任何其他資料類型,則此 SDK 不會傳回任何結果,也不會傳回任何錯誤訊息。

用戶端一致性層級的注意事項

從 4.3.0b3 版開始,如果使用者未將明確一致性層級傳入其用戶端初始化,則其用戶端會使用其資料庫帳戶的預設層級。 先前,預設值已設定為 Session 一致性。 如果基於某些原因而想要繼續執行此動作,您可以變更用戶端初始化,以包含此的明確參數,如下所示:

from azure.cosmos import CosmosClient

import os
URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY, consistency_level='Session')

限制

目前 不支援下列功能。 如需替代選項,請查看下方 的因應措施 一節。

資料平面限制:

  • 依查詢分組
  • 來自 DISTINCT 子查詢的 COUNT 查詢:SELECT COUNT (1) FROM (SELECT DISTINCT C.ID FROM C)
  • 大量/交易式批次處理
  • 直接 TCP 模式存取
  • 匯總跨分割區查詢的接續權杖支援,例如排序、計數和相異。 可串流查詢例如 SELECT * FROM WHERE 支援接續權杖。
  • 變更摘要:處理器
  • 變更摘要:讀取多個分割區索引鍵值
  • 變更摘要:讀取特定時間
  • 變更摘要:從頭讀取
  • 變更摘要:提取模型
  • 混合類型的跨分割區 ORDER BY
  • 啟用非同步查詢類型方法的診斷

控制平面限制:

  • 取得 CollectionSizeUsage、DatabaseUsage 和 DocumentUsage 計量
  • 建立地理空間索引
  • 取得連接字串
  • 取得容器的最低 RU/秒

因應措施

大量處理限制因應措施

如果您想要使用 Python SDK 對 Cosmos DB 執行大量插入,最佳替代方法是使用 預存程式 來寫入具有相同分割區索引鍵的多個專案。

控制平面限制因應措施

一般而言,您可以針對控制平面不支援的限制,使用 Azure 入口網站Azure Cosmos DB 資源提供者 REST APIAzure CLIPowerShell

Boolean 資料類型

雖然 Python 語言對布林類型 使用 「True」 和 「False」,但 Cosmos DB 只 接受 「true」 和 「false」。 換句話說,Python 語言會使用具有第一個大寫字母和所有其他小寫字母的布林值,而 Cosmos DB 及其 SQL 語言只針對相同的布林值使用小寫字母。 如何處理這項挑戰?

  • 使用 Python 建立的 JSON 檔必須使用 「True」 和 「False」,才能通過語言驗證。 SDK 會為您轉換為 「true」 和 「false」。 這表示 「true」 和 「false」 會儲存在 Cosmos DB 中。
  • 如果您使用 Cosmos DB 入口網站的Data Explorer來擷取這些檔,您會看到 「true」 和 「false」。
  • 如果您使用這個 Python SDK 擷取這些檔,則 「true」 和 「false」 值會自動轉換成 「True」 和 「False」。

SQL 查詢 x FROM 子句子專案

此 SDK 會使用 query_items 方法, 將 SQL 查詢提交至 Azure Cosmos DB。

Cosmos DB SQL 語言可讓您 使用 FROM 子句來取得子專案,以將來源縮減為較小的子集。 例如,您可以使用 select * from Families.childrenselect * from Families 而不是 。 但請注意:

  • 對於使用 方法的 query_items SQL 查詢,此 SDK 會要求您指定 partition_key 或使用 enable_cross_partition_query 旗標。
  • 如果您要取得子專案並指定 partition_key ,請確定您的分割區索引鍵包含在子專案中,這在大部分情況下並不成立。

最大項目計數

這是query_items方法的參數,整數表示每個頁面要傳回的專案數上限。 None您可以指定 值,讓服務判斷最佳專案計數。 這是建議的組態值,如果未設定此 SDK 的預設行為。

範例

下列各節提供數個程式碼片段,內容涵蓋一些最常見的 Cosmos DB 工作,包括:

建立資料庫

驗證 CosmosClient 之後,您便能使用帳戶中的任何資源。 下列程式碼片段會建立 SQL API 資料庫,這是叫用 create_database 時未指定 API 時的預設值。

from azure.cosmos import CosmosClient, exceptions
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
try:
    database = client.create_database(DATABASE_NAME)
except exceptions.CosmosResourceExistsError:
    database = client.get_database_client(DATABASE_NAME)

建立容器

此範例會建立具有預設設定的容器。 如果資料庫中已經有相同名稱的容器, (產生 409 Conflict 錯誤) ,則會改為取得現有的容器。

from azure.cosmos import CosmosClient, PartitionKey, exceptions
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'

try:
    container = database.create_container(id=CONTAINER_NAME, partition_key=PartitionKey(path="/productName"))
except exceptions.CosmosResourceExistsError:
    container = database.get_container_client(CONTAINER_NAME)
except exceptions.CosmosHttpResponseError:
    raise

建立啟用分析存放區的容器

此範例會建立已啟用分析存放區的容器,以供報表、BI、AI 和 Advanced Analytics 與Azure Synapse Link使用。

analytical_storage_ttl的選項如下:

  • 0 或 Null 或未通知:未啟用。
  • -1:資料會無限地儲存。
  • 任何其他數位:實際 ttl,以秒為單位。
CONTAINER_NAME = 'products'
try:
    container = database.create_container(id=CONTAINER_NAME, partition_key=PartitionKey(path="/productName"),analytical_storage_ttl=-1)
except exceptions.CosmosResourceExistsError:
    container = database.get_container_client(CONTAINER_NAME)
except exceptions.CosmosHttpResponseError:
    raise

如果容器建立失敗,上述程式碼片段也會處理 CosmosHttpResponseError 例外狀況。 如需錯誤處理和疑難排解的詳細資訊,請參閱 節。

取得現有的容器

從資料庫擷取現有的容器:

from azure.cosmos import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

差入資料

若要將專案插入容器中,請將包含資料的字典傳遞至 ContainerProxy.upsert_item。 您新增至容器的每個專案都必須包含索引鍵,其中包含可唯一 id 識別容器內專案的值。

此範例會將數個專案插入容器中,每個專案都有唯 id 一的 :

from azure.cosmos import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

for i in range(1, 10):
    container.upsert_item({
            'id': 'item{0}'.format(i),
            'productName': 'Widget',
            'productModel': 'Model {0}'.format(i)
        }
    )

刪除資料

若要從容器中刪除專案,請使用 ContainerProxy.delete_item。 Cosmos DB 中的 SQL API 不支援 SQL DELETE 語句。

from azure.cosmos import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

for item in container.query_items(
        query='SELECT * FROM products p WHERE p.productModel = "Model 2"',
        enable_cross_partition_query=True):
    container.delete_item(item, partition_key='Widget')

注意:如果您使用資料分割集合,則上述範例程式碼中的 值 partitionKey 應該設定為此特定專案的分割區索引鍵值,而不是集合中資料分割索引鍵資料行的名稱。 這適用于點讀取和刪除。

查詢資料庫

Cosmos DB SQL API 資料庫支援使用類似 SQL 語法 ContainerProxy.query_items 查詢容器中的專案。

此範例會查詢具有特定 id 之專案的容器:

from azure.cosmos import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

# Enumerate the returned items
import json
for item in container.query_items(
        query='SELECT * FROM mycontainer r WHERE r.id="item3"',
        enable_cross_partition_query=True):
    print(json.dumps(item, indent=True))

注意:雖然您可以在 子句中 FROM 指定容器名稱的任何值,但建議您使用容器名稱來保持一致性。

傳遞包含參數及其值的字典,以執行參數化查詢 ,以ContainerProxy.query_items

discontinued_items = container.query_items(
    query='SELECT * FROM products p WHERE p.productModel = @model',
    parameters=[
        dict(name='@model', value='Model 7')
    ],
    enable_cross_partition_query=True
)
for item in discontinued_items:
    print(json.dumps(item, indent=True))

如需使用 SQL API 查詢 Cosmos DB 資料庫的詳細資訊,請參閱使用 SQL 查詢進行 Azure Cosmos DB 資料查詢

取得資料庫屬性

取得並顯示資料庫的屬性:

from azure.cosmos import CosmosClient
import os
import json

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
properties = database.read()
print(json.dumps(properties))

取得資料庫和容器輸送量

取得並顯示資料庫和具有專用輸送量之容器的輸送量值:

from azure.cosmos import CosmosClient
import os
import json

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)

# Database
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
db_offer = database.read_offer()
print('Found Offer \'{0}\' for Database \'{1}\' and its throughput is \'{2}\''.format(db_offer.properties['id'], database.id, db_offer.properties['content']['offerThroughput']))

# Container with dedicated throughput only. Will return error "offer not found" for containers without dedicated throughput
CONTAINER_NAME = 'testContainer'
container = database.get_container_client(CONTAINER_NAME)
container_offer = container.read_offer()
print('Found Offer \'{0}\' for Container \'{1}\' and its throughput is \'{2}\''.format(container_offer.properties['id'], container.id, container_offer.properties['content']['offerThroughput']))

修改容器屬性

您可以修改現有容器的特定屬性。 本範例會將容器中專案的預設存留時間設定為 10 秒 (TTL) :

from azure.cosmos import CosmosClient, PartitionKey
import os
import json

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

database.replace_container(
    container,
    partition_key=PartitionKey(path="/productName"),
    default_ttl=10,
)
# Display the new TTL setting for the container
container_props = container.read()
print(json.dumps(container_props['defaultTtl']))

如需 TTL 的詳細資訊,請參閱 Azure Cosmos DB 資料的存留時間

使用非同步用戶端

非同步 cosmos 用戶端是個別的用戶端,其外觀和運作方式與現有的同步用戶端類似。 不過,非同步用戶端必須個別匯入,而且其方法必須與 async/await 關鍵字搭配使用。 非同步用戶端必須在使用之後初始化和關閉,這可以手動完成或使用內容管理員。 下列範例示範如何手動執行這項操作。

from azure.cosmos.aio import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
DATABASE_NAME = 'testDatabase'
CONTAINER_NAME = 'products'    

async def create_products():
    client = CosmosClient(URL, credential=KEY)
    database = client.get_database_client(DATABASE_NAME)
    container = database.get_container_client(CONTAINER_NAME)
    for i in range(10):
        await container.upsert_item({
                'id': 'item{0}'.format(i),
                'productName': 'Widget',
                'productModel': 'Model {0}'.format(i)
            }
        )
    await client.close() # the async client must be closed manually if it's not initialized in a with statement

強烈建議使用 async with 關鍵字,而不是手動開啟和關閉用戶端。 這會建立內容管理員,此管理員會在您離開 語句之後初始化用戶端,稍後關閉用戶端。 下列範例示範如何執行這項操作。

from azure.cosmos.aio import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
DATABASE_NAME = 'testDatabase'
CONTAINER_NAME = 'products'

async def create_products():
    async with CosmosClient(URL, credential=KEY) as client: # the with statement will automatically initialize and close the async client
        database = client.get_database_client(DATABASE_NAME)
        container = database.get_container_client(CONTAINER_NAME)
        for i in range(10):
            await container.upsert_item({
                    'id': 'item{0}'.format(i),
                    'productName': 'Widget',
                    'productModel': 'Model {0}'.format(i)
                }
            )

使用非同步用戶端進行查詢

不同于同步用戶端,非同步用戶端在要求中沒有 enable_cross_partition 旗標。 沒有指定資料分割索引鍵值的查詢預設會嘗試執行跨資料分割查詢。

您可以逐一查看查詢結果,但查詢的原始輸出會傳回非同步反覆運算器。 這表示反覆運算器中的每個物件都是可等候的物件,而且尚未包含真正的查詢結果。 若要取得查詢結果,您可以使用 async for 迴圈,它會在您逐一查看物件時等候每個結果,或在逐一查看非同步反覆運算器時手動等候每個查詢結果。

由於查詢結果是非同步反覆運算器,因此無法直接轉換成清單;相反地,如果您需要從結果建立清單,請使用 async for 迴圈或 Python 的清單理解來填入清單:

from azure.cosmos.aio import CosmosClient
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'products'
container = database.get_container_client(CONTAINER_NAME)

async def create_lists():
    results = container.query_items(
            query='SELECT * FROM products p WHERE p.productModel = "Model 2"')

    # iterates on "results" iterator to asynchronously create a complete list of the actual query results

    item_list = []
    async for item in results:
        item_list.append(item)

    # Asynchronously creates a complete list of the actual query results. This code performs the same action as the for-loop example above.
    item_list = [item async for item in results]
    await client.close()

使用整合式快取

整合式快取是記憶體內部快取,可協助您在要求磁片區成長時確保可管理的成本和低延遲。 整合式快取有兩個部分:點讀取的專案快取,以及查詢的查詢快取。 下列程式碼片段示範如何搭配點讀取和查詢快取方法使用此功能。

使用這項功能的優點是,叫用整合式快取的點讀取和查詢不會使用任何 RU。 這表示您會比從後端讀取的作業成本低很多。

如何設定 Azure Cosmos DB 整合式快取 (預覽)

import azure.cosmos.cosmos_client as cosmos_client
import os

URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
client = cosmos_client.CosmosClient(URL, credential=KEY)
DATABASE_NAME = 'testDatabase'
database = client.get_database_client(DATABASE_NAME)
CONTAINER_NAME = 'testContainer'
container = database.get_container_client(CONTAINER_NAME)

def integrated_cache_snippet():
    item_id = body['id'] 
    query = 'SELECT * FROM c'

    #item cache
    container.read_item(item=item_id, partition_key=item_id, max_integrated_cache_staleness_in_ms=30000)

    #query cache   
    container.query_items(query=query,
         partition_key=item_id, max_integrated_cache_staleness_in_ms=30000)

如需整合式快取的詳細資訊,請參閱 Azure Cosmos DB 整合式快取 - 概觀

疑難排解

一般

當您使用 Python SDK 與 Cosmos DB 互動時,服務所傳回的例外狀況會對應至針對 REST API 要求傳回的相同 HTTP 狀態碼:

Azure Cosmos DB 的 HTTP 狀態碼

例如,如果您嘗試使用已在 Cosmos DB 資料庫中使用的識別碼 (名稱) 建立容器, 409 則會傳回錯誤,指出衝突。 下列程式碼片段會藉由攔截例外狀況並顯示錯誤的其他相關資訊,來適當地處理錯誤。

try:
    database.create_container(id=CONTAINER_NAME, partition_key=PartitionKey(path="/productName"))
except exceptions.CosmosResourceExistsError:
    print("""Error creating container
HTTP status code 409: The ID (name) provided for the container is already in use.
The container name must be unique within the database.""")

記錄

此程式庫會使用標準記錄程式庫進行 記錄 。 HTTP 會話的基本資訊 (URL、標頭等。) 會記錄在 INFO 層級。

您可以在具有 引數的用戶端 logging_enable 上啟用詳細的 DEBUG 層級記錄,包括要求/回應主體和未回應標頭:

import sys
import logging
from azure.cosmos import CosmosClient

# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# This client will log detailed information about its HTTP sessions, at DEBUG level
client = CosmosClient(URL, credential=KEY, logging_enable=True)

同樣地,logging_enable 可對單一作業啟用詳細記錄,即使未對用戶端啟用也可行:

database = client.create_database(DATABASE_NAME, logging_enable=True)

或者,您可以使用 CosmosHttpLoggingPolicy 進行記錄,其會透過將記錄器傳入自 logger 變數,從 azure 核心 HttpLoggingPolicy 擴充。 根據預設,它會使用來自 HttpLoggingPolicy 的行為。 傳入 自 enable_diagnostics_logging 變數將會啟用 CosmosHttpLoggingPolicy,並在回應中具有與 Cosmos 問題相關的其他資訊。

import logging
from azure.cosmos import CosmosClient

#Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a file output
handler = logging.FileHandler(filename="azure")
logger.addHandler(handler)

# This client will log diagnostic information from the HTTP session by using the CosmosHttpLoggingPolicy.
# Since we passed in the logger to the client, it will log information on every request.
client = CosmosClient(URL, credential=KEY, logger=logger, enable_diagnostics_logging=True)

同樣地,您可以藉由將記錄器傳入單一要求來啟用單一作業的記錄。 不過,如果您想要使用 CosmosHttpLoggingPolicy 取得其他資訊, enable_diagnostics_logging 則必須在用戶端建構函式中傳入 引數。

# This example enables the CosmosHttpLoggingPolicy and uses it with the `logger` passed in to the `create_database` request.
client = CosmosClient(URL, credential=KEY, enable_diagnostics_logging=True)
database = client.create_database(DATABASE_NAME, logger=logger)

遙測

Azure Core 可讓 Python SDK 搭配使用 OpenTelemetry。 唯一需要安裝才能使用此功能的套件如下:

pip install azure-core-tracing-opentelemetry
pip install opentelemetry-sdk

如需詳細資訊,建議您從 Azure Core 查看此 ,說明如何設定。 我們也新增 了範例檔案 ,以顯示它如何與 SDK 搭配使用。 不論您使用的 Cosmos 用戶端為何,這都能以相同方式運作。

後續步驟

如需 Cosmos DB 服務的更多詳細文件,請參閱 docs.microsoft.com 上的 Azure Cosmos DB 文件

參與

此專案歡迎參與和提供建議。 大部分的參與都要求您同意「參與者授權合約 (CLA)」,宣告您有權且確實授與我們使用投稿的權利。 如需詳細資料,請前往 https://cla.microsoft.com

當您提交提取要求時,CLA Bot 會自動判斷您是否需要提供 CLA,並適當地裝飾 PR (例如標籤、註解)。 請遵循 bot 提供的指示。 您只需要使用我們的 CLA 在所有存放庫上執行此動作一次。

此專案採用 Microsoft Open Source Code of Conduct (Microsoft 開放原始碼管理辦法)。 如需詳細資訊,請參閱管理辦法常見問題集,如有任何其他問題或意見請連絡 opencode@microsoft.com