Partilhar via


Constrói uma aplicação de consola Python com Azure DocumentDB

Este guia guia-o na construção de uma aplicação de consola Python para se ligar a um cluster Azure DocumentDB. Você configura seu ambiente de desenvolvimento, autentica usando o azure.identity pacote do SDK do Azure para Python e executa operações como criar, consultar e atualizar documentos.

Pré-requisitos

  • Uma assinatura do Azure

    • Se você não tiver uma assinatura do Azure, crie uma conta gratuita
  • Um cluster do Azure DocumentDB existente

  • Autenticação do Microsoft Entra configurada para o cluster com o papel atribuído à sua identidade root.

  • Última versão do Python.

Configurar seu aplicativo de console

Em seguida, crie um novo projeto de aplicativo de console e importe as bibliotecas necessárias para autenticar no cluster.

  1. Crie um novo diretório para o seu projeto e configure um ambiente virtual.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Ative o ambiente virtual.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Crie um novo arquivo Python para seu aplicativo.

    touch app.py
    
  4. Instale a biblioteca para autenticação do azure.identity Azure.

    pip install azure.identity
    
  5. Instale o pymongo driver para Python.

    pip install pymongo
    

Ligar ao cluster

Agora, use a Azure.Identity biblioteca para obter um TokenCredential para usar para se conectar ao seu cluster. O driver oficial do MongoDB tem uma interface especial que deve ser implementada para obter tokens do Microsoft Entra para uso ao se conectar ao cluster.

  1. Importe os módulos necessários na parte superior do seu arquivo Python.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. Crie uma classe personalizada que implemente a interface de retorno de chamada do MongoDB OpenID Connect (OIDC).

    class AzureIdentityTokenCallback(OIDCCallback):
        def __init__(self, credential):
            self.credential = credential
    
        def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
            token = self.credential.get_token(
                "https://ossrdbms-aad.database.windows.net/.default").token
            return OIDCCallbackResult(access_token=token)
    
  3. Defina a variável de nome do cluster.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. Crie uma instância de DefaultAzureCredential e configure as propriedades de autenticação.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Crie um cliente MongoDB configurado com autenticação Microsoft Entra.

    client = MongoClient(
        f"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/",
        connectTimeoutMS=120000,
        tls=True,
        retryWrites=True,
        authMechanism="MONGODB-OIDC",
        authMechanismProperties=authProperties
    )
    
    print("Client created")
    

Executar operações comuns

Finalmente, use a biblioteca oficial para executar tarefas comuns com bancos de dados, coleções e documentos. Aqui, você usa as mesmas classes e métodos que usaria para interagir com o MongoDB ou o Banco de Dados de Documentos para gerenciar suas coleções e itens.

  1. Obtenha uma referência à sua base de dados.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. Obtenha uma referência à sua coleção de dados.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Crie um documento e atualize-o para a coleção com collection.update_one.

    new_document = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards",
        "name": "Yamba Surfboard",
        "quantity": 12,
        "price": 850.00,
        "clearance": False,
    }
    
    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    }
    payload = {
        "$set": new_document
    }
    result = collection.update_one(filter, payload, upsert=True)
    
  4. Use collection.find_one para recuperar um documento específico da coleção.

    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards"
    }
    existing_document = collection.find_one(filter)
    print(f"Read document _id:\t{existing_document['_id']}")
    
  5. Consulta de vários documentos com collection.find que correspondam a um filtro.

    filter = {
        "category": "gear-surf-surfboards"
    }
    matched_documents = collection.find(filter)
    
    for document in matched_documents:
        print(f"Found document:\t{document}")