Condividi tramite


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

Vedi anche