Delen via


Een Python-console-app bouwen met Azure DocumentDB

Deze handleiding helpt u bij het bouwen van een Python-consoletoepassing om verbinding te maken met een Azure DocumentDB-cluster. U configureert uw ontwikkelomgeving, verifieert met behulp van het azure.identity pakket van de Azure SDK voor Python en voert bewerkingen uit, zoals het maken, opvragen en bijwerken van documenten.

Vereiste voorwaarden

  • Een Azure-abonnement

  • Een bestaand Azure DocumentDB-cluster

  • Microsoft Entra-verificatie die is geconfigureerd voor het cluster met uw door uw identiteit verleende root rol.

  • Nieuwste versie van Python.

Uw consoletoepassing configureren

Maak vervolgens een nieuw consoletoepassingsproject en importeer de benodigde bibliotheken om te verifiëren bij uw cluster.

  1. Maak een nieuwe map voor uw project en stel een virtuele omgeving in.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Activeer de virtuele omgeving.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Maak een nieuw Python-bestand voor uw toepassing.

    touch app.py
    
  4. Installeer de azure.identity bibliotheek voor Azure-verificatie.

    pip install azure.identity
    
  5. Installeer het pymongo stuurprogramma voor Python.

    pip install pymongo
    

Verbinding maken met het cluster

Gebruik nu de Azure.Identity bibliotheek om een TokenCredential te krijgen, die u kunt gebruiken om verbinding te maken met uw cluster. Het officiële MongoDB-stuurprogramma heeft een speciale interface die moet worden geïmplementeerd om tokens van Microsoft Entra te verkrijgen voor gebruik bij het maken van verbinding met het cluster.

  1. Importeer de benodigde modules boven aan uw Python-bestand.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. Maak een aangepaste klasse waarmee de callback-interface van MongoDB OpenID Connect (OIDC) wordt geïmplementeerd.

    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. Stel de clusternaamvariabele in.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. Maak een exemplaar van DefaultAzureCredential en stel de verificatie-eigenschappen in.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Maak een MongoDB-client die is geconfigureerd met Microsoft Entra-verificatie.

    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")
    

Algemene bewerkingen uitvoeren

Gebruik ten slotte de officiële bibliotheek om algemene taken uit te voeren met databases, verzamelingen en documenten. Hier gebruikt u dezelfde klassen en methoden die u zou gebruiken om te communiceren met MongoDB of DocumentDB om uw verzamelingen en items te beheren.

  1. Haal een verwijzing naar uw database op.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. Haal een verwijzing naar uw verzameling op.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Maak een document en upsert het in de verzameling met 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. Hiermee collection.find_one haalt u een specifiek document op uit de verzameling.

    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. Voer queries uit op meerdere documenten met collection.find dat overeenkomt met een filter.

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