Freigeben über


Verwalten einer MongoDB-Datenbank mithilfe von Python

GILT FÜR: MongoDB

Der MongoDB-Server in Azure Cosmos DB ist in den üblichen Python-Paketen für MongoDB verfügbar, z. B.:

  • PyMongo für synchrone Python-Anwendungen (wird in diesem Artikel verwendet).
  • Motor für asynchrone Python-Anwendungen.

Hinweis

Die Beispielcodeausschnitte sind auf GitHub als Python-Projekt verfügbar.

Benennen einer Datenbank

In Azure Cosmos DB ist eine Datenbank analog zu einem Namespace. Wenn Sie eine Datenbank erstellen, bildet der Datenbankname ein Segment des URI, der für den Zugriff auf die Datenbankressource und alle untergeordneten Ressourcen verwendet wird.

Hier sind einige schnelle Regeln für das Benennen einer Datenbank:

Nach der Erstellung weist der URI für eine Datenbank das folgende Format auf:

https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>

Abrufen der Datenbankinstanz

Die Datenbank enthält die Sammlungen und die zugehörigen Dokumente. Verwenden Sie für den Zugriff auf eine Datenbank den Zugriff im Attribut- oder Wörterbuchstil der MongoClient-Instanz. Weitere Informationen finden Sie in der PyMongo-Dokumentation unter Getting a Database.

In den folgenden Codeschnipseln wird davon ausgegangen, dass Sie die Clientverbindung bereits erstellt haben und die Clientverbindung nach diesen Codeschnipseln schließen.

Abrufen von Serverinformationen

Auf Serverinformationen greifen Sie mit der server_info-Methode der MongoClient-Klasse zu. Sie müssen den Datenbanknamen nicht angeben, um diese Informationen zu erhalten. Die zurückgegebenen Informationen beziehen sich ausschließlich auf MongoDB und nicht auf die eigentliche Azure Cosmos DB-Plattform.

Sie können Datenbanken auch mit der MongoClient.list_database_names-Methode auflisten und mit der MongoClient.db.command-Methode einen MongoDB-Befehl für eine Datenbank aufrufen.

# Get server information
for k, v in client.server_info().items():
    print("Key: {} , Value: {}".format(k, v))

# Get server status of admin database
print("Server status {}".format(client.admin.command("serverStatus")))

# List databases
databases = client.list_database_names()
print("Databases: {}".format(databases))

Der vorherige Codeschnipsel zeigt eine Ausgabe ähnlich der folgenden exemplarischen Konsolenausgabe an:

Key: version , Value: 3.6.0
Key: versionArray , Value: [3, 6, 0, 0]
Key: bits , Value: 64
Key: maxBsonObjectSize , Value: 16777216
Key: ok , Value: 1.0
Server status {'ok': 1.0}
Databases: ['adventureworks']

Ist die Datenbank vorhanden?

Der PyMongo-Treiber für Python erstellt eine Datenbank, falls keine vorhanden ist, wenn Sie darauf zugreifen. Wir empfehlen Ihnen jedoch, stattdessen die MongoDB-Erweiterungsbefehle zu verwenden, um Daten zu verwalten, die in der Azure Cosmos DB-API für MongoDB gespeichert sind. Um eine neue Datenbank zu erstellen, falls diese noch nicht vorhanden ist, verwenden Sie die Erweiterung create database, wie im folgenden Codeschnipsel gezeigt.

Um zu prüfen, ob die Datenbank bereits vorhanden ist, ehe Sie sie verwenden, rufen Sie mit der Methode list_database_names die Liste der aktuellen Datenbanken ab.

# Get list of databases
databases = client.list_database_names()
if not databases:
    print("No databases found")

# Does database exist?
DB_NAME = "adventureworks"
if DB_NAME in databases:
    print("Database exists: {}".format(DB_NAME))
else:
    client[DB_NAME].command(
        {"customAction": "CreateDatabase", "offerThroughput": 400}
    )
    print("Created db '{}' with shared throughput.\n".format(DB_NAME))

Der vorherige Codeschnipsel zeigt eine Ausgabe ähnlich der folgenden exemplarischen Konsolenausgabe an:

Database exists: adventureworks

Abrufen der Datenbankliste, Sammlungen und Dokumentanzahl

Wenn Sie Ihren MongoDB-Server programmgesteuert verwalten, ist es hilfreich, zu wissen, welche Datenbanken und Sammlungen auf dem Server und wie viele Dokumente in den einzelnen Sammlungen vorhanden sind. Weitere Informationen finden Sie unter

# Get list of databases
databases = client.list_database_names()

# Loop through databases
for db in databases:
    print("Database: {}".format(db))

    # Get list of collections
    collections = client[db].list_collection_names()

    # Loop through collections
    for col in collections:
        print("\tCollection: {}".format(col))

        # Get document count
        doc_count = client[db][col].count_documents({})
        print("\tDocument count: {}".format(doc_count))

Der vorherige Codeschnipsel zeigt eine Ausgabe ähnlich der folgenden exemplarischen Konsolenausgabe an:

Database: adventureworks
        Collection: products_new
        Document count: 1
        Collection: products
        Document count: 3
Database: testdb
        Collection: mycoll
        Document count: 1

Abrufen der Datenbankobjektinstanz

Wenn eine Datenbank nicht vorhanden ist, erstellt der PyMongo-Treiber für Python diese, wenn Sie auf sie zugreifen. Wir empfehlen Ihnen jedoch, stattdessen die MongoDB-Erweiterungsbefehle zu verwenden, um Daten zu verwalten, die in der Azure Cosmos DB-API für MongoDB gespeichert sind. Das Muster wird oben im Abschnitt Datenbank vorhanden? gezeigt.

Wenn Sie mit PyMongo arbeiten, greifen Sie auf Datenbanken im Attributstil auf MongoClient-Instanzen zu. Sobald Sie über eine Datenbankinstanz verfügen, können Sie, wie unten gezeigt, Vorgänge auf Datenbankebene anwenden.

collections = client[db].list_collection_names()

Eine Übersicht über das Arbeiten mit Datenbanken unter Verwendung des PyMongo-Treibers finden Sie unter Vorgänge auf Datenbankebene.

Löschen einer Datenbank

Eine Datenbank wird mit der drop_database-Methode der MongoClient-Instanz vom Server entfernt.

DB_NAME = input("Enter database name to drop: ")
if DB_NAME in client.list_database_names():
    print("Dropping database: {}".format(DB_NAME))
    client.drop_database(DB_NAME)
else:
    print("Didn't find database: {}".format(DB_NAME))

Der vorherige Codeschnipsel zeigt eine Ausgabe ähnlich der folgenden exemplarischen Konsolenausgabe an:

Enter database name to drop: adventureworks
Dropping database: adventureworks

Siehe auch