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