Een MongoDB-database beheren met Behulp van Python
VAN TOEPASSING OP: MongoDB
Uw MongoDB-server in Azure Cosmos DB is beschikbaar via de algemene Python-pakketten voor MongoDB, zoals:
- PyMongo voor synchrone Python-toepassingen en wordt gebruikt in dit artikel.
- Motor voor asynchrone Python-toepassingen.
Notitie
De voorbeeldcodefragmenten zijn beschikbaar op GitHub als een Python-project.
Een database een naam opgeven
In Azure Cosmos DB is een database vergelijkbaar met een naamruimte. Wanneer u een database maakt, vormt de databasenaam een segment van de URI die wordt gebruikt voor toegang tot de databaseresource en eventuele onderliggende resources.
Hier volgen enkele snelle regels bij het benoemen van een database:
Zodra de URI voor een database is gemaakt, heeft deze indeling:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Database-exemplaar ophalen
De database bevat de verzamelingen en hun documenten. Als u toegang wilt krijgen tot een database, gebruikt u toegang tot kenmerkstijlen of toegang tot woordenlijststijlen van de MongoClient. Zie Een database ophalen voor meer informatie.
Bij de volgende codefragmenten wordt ervan uitgegaan dat u de clientverbinding al hebt gemaakt en dat u de clientverbinding sluit na deze codefragmenten.
Servergegevens ophalen
Toegang tot servergegevens met de server_info methode van de MongoClient-klasse. U hoeft de databasenaam niet op te geven om deze informatie op te halen. De geretourneerde informatie is specifiek voor MongoDB en vertegenwoordigt niet het Azure Cosmos DB-platform zelf.
U kunt ook databases weergeven met behulp van de methode MongoClient.list_database_names en een MongoDB-opdracht naar een database uitgeven met de methode MongoClient.db.command .
# 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))
In het voorgaande codefragment wordt uitvoer weergegeven die vergelijkbaar is met de volgende voorbeeldconsole-uitvoer:
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']
Bestaat de database?
Het PyMongo-stuurprogramma voor Python maakt een database als deze niet bestaat wanneer u deze opent. Het is echter raadzaam om in plaats daarvan de MongoDB-extensieopdrachten te gebruiken om gegevens te beheren die zijn opgeslagen in de API van Azure Cosmos DB voor MongoDB. Als u een nieuwe database wilt maken als deze niet bestaat, gebruikt u de database-extensie maken, zoals wordt weergegeven in het volgende codefragment.
Als u wilt zien of de database al bestaat voordat u deze gebruikt, haalt u de lijst met huidige databases op met de methode list_database_names .
# 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))
In het voorgaande codefragment wordt uitvoer weergegeven die vergelijkbaar is met de volgende voorbeeldconsole-uitvoer:
Database exists: adventureworks
Lijst met databases, verzamelingen en aantal documenten ophalen
Wanneer u uw MongoDB-server programmatisch beheert, is het handig om te weten welke databases en verzamelingen zich op de server bevinden en hoeveel documenten in elke verzameling. Zie voor meer informatie:
# 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))
In het voorgaande codefragment wordt uitvoer weergegeven die vergelijkbaar is met de volgende voorbeeldconsole-uitvoer:
Database: adventureworks
Collection: products_new
Document count: 1
Collection: products
Document count: 3
Database: testdb
Collection: mycoll
Document count: 1
Exemplaar van databaseobject ophalen
Als er geen database bestaat, maakt het PyMongo-stuurprogramma voor Python deze wanneer u deze opent. Het is echter raadzaam om in plaats daarvan de MongoDB-extensieopdrachten te gebruiken om gegevens te beheren die zijn opgeslagen in de API van Azure Cosmos DB voor MongoDB. Het patroon wordt hierboven weergegeven in de sectie Bestaat de database?
Wanneer u met PyMongo werkt, opent u databases met behulp van kenmerkstijltoegang op MongoClient-exemplaren. Zodra u een database-exemplaar hebt, kunt u bewerkingen op databaseniveau gebruiken, zoals hieronder wordt weergegeven.
collections = client[db].list_collection_names()
Zie Bewerkingen op databaseniveau voor een overzicht van het werken met databases met behulp van het PyMongo-stuurprogramma.
Een database verwijderen
Een database wordt verwijderd van de server met behulp van de drop_database methode van de MongoClient.
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))
In het voorgaande codefragment wordt uitvoer weergegeven die vergelijkbaar is met de volgende voorbeeldconsole-uitvoer:
Enter database name to drop: adventureworks
Dropping database: adventureworks