Gestire un database MongoDB con Python
SI APPLICA A: MongoDB
Il server MongoDB in Azure Cosmos DB è disponibile dai pacchetti Python comuni per MongoDB, ad esempio:
- PyMongo per le applicazioni Python sincrone e usate in questo articolo.
- Motor per le applicazioni Python asincrone.
Nota
I frammenti di codice di esempio sono disponibili in GitHub come progetto Python.
Assegnare un nome a un database
In Azure Cosmos DB, un database è analogo a uno spazio dei nomi. Quando si crea un database, il nome del database costituisce un segmento dell'URI usato per accedere alla risorsa di database e alle risorse figlio.
Ecco alcune regole rapide per la denominazione di un database:
Dopo la creazione, l'URI per un database è in questo formato:
https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>
Ottenere un'istanza del database
Il database contiene le raccolte e i relativi documenti. Per accedere a un database, usare l'accesso allo stile di attributo o l'accesso allo stile del dizionario di MongoClient. Per altre informazioni, vedere Recupero di un database.
I frammenti di codice seguenti presuppongono che sia già stata creata la connessione client e che si chiuda la connessione client dopo questi frammenti di codice.
Ottenere informazioni sul server
Accedere alle informazioni sul server con il metodo server_info della classe MongoClient. Non è necessario specificare il nome del database per ottenere queste informazioni. Le informazioni restituite sono specifiche di MongoDB e non rappresentano la piattaforma Azure Cosmos DB stessa.
È anche possibile elencare i database usando il metodo MongoClient.list_database_names ed eseguire un comando MongoDB a un database con il metodo 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))
Il frammento di codice precedente visualizza un output simile a quello della console di esempio seguente:
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']
Il database esiste?
Il driver PyMongo per Python crea un database se non esiste quando si accede. È tuttavia consigliabile usare i comandi di estensione MongoDB per gestire i dati archiviati nell'API di Azure Cosmos DB for MongoDB. Per creare un nuovo database, se non esiste, usare creare l'estensione di database come illustrato nel frammento di codice seguente.
Per verificare se il database esiste già prima di usarlo, ottenere l'elenco dei database correnti con il metodo 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))
Il frammento di codice precedente visualizza un output simile a quello della console di esempio seguente:
Database exists: adventureworks
Ottenere l'elenco di database, raccolte e conteggio dei documenti
Quando si gestisce il server MongoDB a livello di codice, è utile conoscere i database e le raccolte presenti nel server e il numero di documenti in ogni raccolta. Per altre informazioni, vedi:
# 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))
Il frammento di codice precedente visualizza un output simile a quello della console di esempio seguente:
Database: adventureworks
Collection: products_new
Document count: 1
Collection: products
Document count: 3
Database: testdb
Collection: mycoll
Document count: 1
Ottenere l'istanza dell'oggetto di database
Se non esiste un database, il driver PyMongo per Python lo crea quando si accede. È tuttavia consigliabile usare i comandi di estensione MongoDB per gestire i dati archiviati nell'API di Azure Cosmos DB for MongoDB. Il modello è illustrato sopra nella sezione Il database esiste?.
Quando si usa PyMongo, si accede ai database usando l'accesso allo stile degli attributi nelle istanze MongoClient. Dopo aver creato un'istanza del database, è possibile usare le operazioni a livello di database, come illustrato di seguito.
collections = client[db].list_collection_names()
Per una panoramica dell'uso dei database con il driver PyMongo, vedere Operazioni a livello di database.
Eliminare un database
Un database viene rimosso dal server usando il metodo drop_database di 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))
Il frammento di codice precedente visualizza un output simile a quello della console di esempio seguente:
Enter database name to drop: adventureworks
Dropping database: adventureworks