Udostępnij za pomocą


Tworzenie aplikacji konsolowej języka Python przy użyciu usługi Azure DocumentDB

Ten przewodnik przeprowadzi Cię przez proces tworzenia aplikacji konsolowej języka Python w celu nawiązania połączenia z klastrem usługi Azure DocumentDB. Środowisko projektowe można skonfigurować, uwierzytelniać przy użyciu azure.identity pakietu z zestawu Azure SDK dla języka Python i wykonywać operacje, takie jak tworzenie, wykonywanie zapytań i aktualizowanie dokumentów.

Wymagania wstępne

  • Subskrypcja platformy Azure

  • Istniejący klaster usługi Azure DocumentDB

  • Uwierzytelnianie Microsoft Entra zostało skonfigurowane dla klastra z przypisaną rolą dla Twojej tożsamości root.

  • Najnowsza wersja języka Python.

Konfigurowanie aplikacji konsolowej

Następnie utwórz nowy projekt aplikacji konsolowej i zaimportuj niezbędne biblioteki do uwierzytelniania w klastrze.

  1. Utwórz nowy katalog dla projektu i skonfiguruj środowisko wirtualne.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Aktywuj środowisko wirtualne.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Utwórz nowy plik w języku Python dla aplikacji.

    touch app.py
    
  4. Zainstaluj bibliotekę azure.identity na potrzeby uwierzytelniania platformy Azure.

    pip install azure.identity
    
  5. pymongo Zainstaluj sterownik dla języka Python.

    pip install pymongo
    

Połącz się z klastrem

Teraz użyj biblioteki Azure.Identity, aby uzyskać TokenCredential, którego możesz użyć do połączenia się z klastrem. Oficjalny sterownik bazy danych MongoDB ma specjalny interfejs, który należy zaimplementować w celu uzyskania tokenów z firmy Microsoft Entra do użycia podczas nawiązywania połączenia z klastrem.

  1. Zaimportuj niezbędne moduły w górnej części pliku języka Python.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. Utwórz klasę niestandardową, która implementuje interfejs wywołania zwrotnego 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. Ustaw zmienną nazwy klastra.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. Utwórz instancję DefaultAzureCredential i skonfiguruj właściwości uwierzytelniania.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Utwórz klienta bazy danych MongoDB skonfigurowanego przy użyciu uwierzytelniania entra firmy Microsoft.

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

Wykonywanie typowych operacji

Na koniec użyj oficjalnej biblioteki do wykonywania typowych zadań z bazami danych, kolekcjami i dokumentami. W tym miejscu użyjesz tych samych klas i metod, których należy użyć do interakcji z bazą danych MongoDB lub DocumentDB w celu zarządzania kolekcjami i elementami.

  1. Uzyskaj referencję do bazy danych.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. Uzyskaj referencję do swojej kolekcji.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Utwórz dokument i wstaw go do kolekcji za pomocą polecenia 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. Użyj collection.find_one aby pobrać określony dokument z kolekcji.

    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. Wykonaj zapytanie o wiele dokumentów, collection.find które pasują do filtru.

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