Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Leitfaden führt Sie durch das Erstellen einer Python-Konsolenanwendung zum Herstellen einer Verbindung mit einem Azure DocumentDB-Cluster. Sie konfigurieren Ihre Entwicklungsumgebung, authentifizieren sich mithilfe des azure.identity Pakets aus dem Azure SDK für Python und führen Vorgänge wie Erstellen, Abfragen und Aktualisieren von Dokumenten aus.
Voraussetzungen
Ein Azure-Abonnement
- Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto
Ein vorhandener Azure DocumentDB-Cluster
- Wenn Sie keinen Cluster haben, erstellen Sie einen neuen Cluster.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter "Erste Schritte mit Azure Cloud Shell".
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, installieren Sie die Azure CLI. Wenn Sie mit Windows oder macOS arbeiten, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
Microsoft Entra-Authentifizierung ist für den Cluster konfiguriert, wobei Ihrer Identität die
rootRolle zugewiesen wurde.- Um die Microsoft Entra-Authentifizierung zu aktivieren, lesen Sie das Konfigurationshandbuch.
Neueste Version von Python.
Konfigurieren der Konsolenanwendung
Erstellen Sie als Nächstes ein neues Konsolenanwendungsprojekt, und importieren Sie die erforderlichen Bibliotheken, um sich bei Ihrem Cluster zu authentifizieren.
Erstellen Sie ein neues Verzeichnis für Ihr Projekt, und richten Sie eine virtuelle Umgebung ein.
mkdir mongodb-app cd mongodb-app python -m venv .venvAktivieren Sie die virtuelle Umgebung.
# On Windows .venv\Scripts\activate # On macOS/Linux source .venv/bin/activateErstellen Sie eine neue Python-Datei für Ihre Anwendung.
touch app.pyInstallieren Sie die Bibliothek für die
azure.identityAzure-Authentifizierung.pip install azure.identityInstallieren Sie den
pymongoTreiber für Python.pip install pymongo
Herstellen einer Verbindung mit dem Cluster
Verwenden Sie nun die Azure.Identity Bibliothek, um ein TokenCredential zu erhalten, das Sie verwenden können, um sich mit Ihrem Cluster zu verbinden. Der offizielle MongoDB-Treiber verfügt über eine spezielle Schnittstelle, die implementiert werden muss, um Token von Microsoft Entra für die Verwendung beim Herstellen einer Verbindung mit dem Cluster abzurufen.
Importieren Sie die erforderlichen Module oben in Ihrer Python-Datei.
from azure.identity import DefaultAzureCredential from pymongo import MongoClient from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResultErstellen Sie eine benutzerdefinierte Klasse, die die MongoDB OpenID Connect (OIDC)-Rückrufschnittstelle implementiert.
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)Legen Sie die Clusternamenvariable fest.
clusterName = "<azure-documentdb-cluster-name>"Erstellen Sie eine Instanz von DefaultAzureCredential, und richten Sie die Authentifizierungseigenschaften ein.
credential = DefaultAzureCredential() authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}Erstellen Sie einen MongoDB-Client, der mit der Microsoft Entra-Authentifizierung konfiguriert ist.
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")
Ausführen gängiger Vorgänge
Verwenden Sie schließlich die offizielle Bibliothek, um allgemeine Aufgaben mit Datenbanken, Sammlungen und Dokumenten auszuführen. Hier verwenden Sie die gleichen Klassen und Methoden, mit denen Sie mit MongoDB oder DocumentDB interagieren würden, um Ihre Sammlungen und Elemente zu verwalten.
Rufen Sie einen Verweis auf Ihre Datenbank ab.
database = client.get_database("<database-name>") print("Database pointer created")Rufen Sie einen Verweis auf Ihre Sammlung ab.
collection = database.get_collection("<container-name>") print("Collection pointer created")Erstellen Sie ein Dokument und führen Sie ein Upsert in die Sammlung mit
collection.update_oneaus.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)Verwenden Sie
collection.find_onezum Abrufen eines bestimmten Dokuments aus der Sammlung.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']}")Fragen Sie mit
collection.findnach mehreren Dokumenten ab, die einem Filter entsprechen.filter = { "category": "gear-surf-surfboards" } matched_documents = collection.find(filter) for document in matched_documents: print(f"Found document:\t{document}")