Partager via


Créer une application console Python avec Azure DocumentDB

Ce guide vous guide tout au long de la création d’une application console Python pour vous connecter à un cluster Azure DocumentDB. Vous configurez votre environnement de développement, authentifiez-vous à l’aide du azure.identity package à partir du Kit de développement logiciel (SDK) Azure pour Python et effectuez des opérations telles que la création, l’interrogation et la mise à jour de documents.

Prerequisites

  • Un abonnement Azure

  • Un cluster Azure DocumentDB existant

    • Si vous n’avez pas de cluster, créez un cluster

Configurer votre application console

Ensuite, créez un projet d’application console et importez les bibliothèques nécessaires pour vous authentifier auprès de votre cluster.

  1. Créez un répertoire pour votre projet et configurez un environnement virtuel.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Activez l’environnement virtuel.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Créez un fichier Python pour votre application.

    touch app.py
    
  4. Installez la bibliothèque azure.identity pour l’authentification Azure.

    pip install azure.identity
    
  5. Installez le pymongo pilote pour Python.

    pip install pymongo
    

Se connecter au cluster

À présent, utilisez la bibliothèque Azure.Identity pour obtenir un TokenCredential à utiliser afin de vous connecter à votre cluster. Le pilote MongoDB officiel a une interface spéciale qui doit être implémentée pour obtenir des jetons de Microsoft Entra à utiliser lors de la connexion au cluster.

  1. Importez les modules nécessaires en haut de votre fichier Python.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. Créez une classe personnalisée qui implémente l’interface de rappel OIDC (MongoDB OpenID Connect).

    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. Définissez votre variable de nom de cluster.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. Créez une instance de DefaultAzureCredential et configurez les propriétés d’authentification.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Créez un client MongoDB configuré avec l’authentification 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")
    

Effectuer des opérations courantes

Enfin, utilisez la bibliothèque officielle pour effectuer des tâches courantes avec des bases de données, des collections et des documents. Ici, vous utilisez les mêmes classes et méthodes que celles que vous utiliseriez pour interagir avec MongoDB ou DocumentDB pour gérer vos collections et éléments.

  1. Obtenez une référence à votre base de données.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. Obtenez une référence à votre collection.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Créez un document et upsertez-le dans la collection avec 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. Permet collection.find_one de récupérer un document spécifique de la collection.

    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. Recherchez plusieurs documents avec collection.find qui correspondent à un filtre.

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