PyMongo: utilizzare MongoDB con Python
Se state pensando di utilizzare MongoDB con Python, la soluzione migliore è PyMongo. Questa libreria di driver standard è molto semplice e chiara e offre la possibilità di creare e modificare database e raccolte personalizzate in modo semplicissimo.
Che cos’è PyMongo?
Da qualche anno il sistema di gestione di database NoSQL MongoDB è diventato una vera e propria alternativa a MySQL. Il suo grande valore aggiunto è che, grazie ad appositi driver, vi permette di utilizzare il linguaggio di programmazione che preferite per rappresentare gli oggetti. PyMongo è il pacchetto driver ufficiale che consente di controllare MongoDB con Python.
MongoDB salva i dati come documenti JSON, i quali vengono raggruppati e indicizzati in raccolte per una migliore classificazione. Utilizzando i vari comandi di MongoDB, è possibile recuperare, ordinare, modificare, combinare ed eliminare i dati.
Come installare PyMongo
Per sfruttare la libreria di driver al fine di utilizzare MongoDB con Python, occorre avvalersi del gestore di pacchetti Python PIP. Grazie a questo è possibile installare PyMongo in qualsiasi momento sul dispositivo o sul server su cui MongoDB è in esecuzione. Il comando per farlo è il seguente:
python -m pip install pymongo
Come creare database in MongoDB con Python
Dopo aver installato PyMongo, stabilite la connessione a MongoDB. A tale scopo, occorre servirsi del MongoClient. Di seguito è riportato il comando opportuno (sostituite il segnaposto “<<MongoDB URL>>” con la rispettiva stringa di connessione):
from pymongo import MongoClient
datenbank = MongoClient ('<<MongoDB URL>>')
MongoDB dispone di tre database predefiniti: local, admin e config. Se però desiderate sfruttare MongoDB in modo efficace con Python, dovrete disporre di altri database. Per crearli è sufficiente inserire l’abbreviazione “db”. Il database specificato verrà recuperato se esiste già. Se non esiste ancora un database con il nome in questione, MongoDB lo creerà per voi. Per un nuovo database chiamato “elencoclienti”, il comando è il seguente:
db = client.elencoclienti
Per proteggere ulteriormente i dati, a questo punto si può impostare una procedura di autenticazione. Per impostazione predefinita, i rispettivi dati sono memorizzati nel database “admin”. Per inserire un’autenticazione, si procede in questo modo:
connection = MongoClient ("localhost",
username = "user",
password = "password",
authSource = "admin",
authMechanism = "SCRAM-SHA-256")
Come aggiungere raccolte con PyMongo
Quando avrete creato un database, potrete aggiungere facilmente delle raccolte. Queste ultime, tuttavia, saranno prese in considerazione dal sistema solo se contenenti effettivamente dei documenti. Per creare una nuova raccolta in MongoDB con Python, inserite quanto segue:
collection = database ["clienti_italia"]
Con Managed MongoDB from IONOS enables you to concentrate on the essentials. From installation to operation and maintenance work, IONOS makes sure you always get the best performance from your data banks.
Come inserire voci nel database MongoDB con Python
Ora potete aggiungere contenuti a questa nuova raccolta. I nuovi dati vengono memorizzati lì e possono essere recuperati, combinati o modificati in altro modo in base alle esigenze. Per esempio, un documento si presenta in questo modo:
infocliente = {
"nome" : "Elisa Greco",
"indirizzo" : "Viale Sacco e Vanzetti 104",
"cap" : "00155",
"città" : "Roma"
}
collection.insert_one(infocliente)
Il metodo “insert_many” consente di aggiungere voci anche in modo collettivo. Per ciascuna di queste voci viene automaticamente creato un campo “_id” individuale e unico, mediante il quale è possibile selezionarle e utilizzarle singolarmente anche in seguito. Aggiungere più voci insieme funziona in questo modo:
infocliente = [
{
"nome" : "Elisa Greco",
"indirizzo" : "Viale Sacco e Vanzetti 104",
"cap" : "00155",
"città" : "Roma"
}
{
"name" : "Giorgio Bianchi",
"indirizzo" : "Via Maria Montessori 37",
"cap" : "20138",
"città" : "Milano"
}
{
"name" : "Lucia Russo",
"indirizzo" : "Piazza della Pace 6",
"cap" : "90139",
"città" : "Palermo"
}
]
collection.insert_many(infocliente)
Come reperire i dati MongoDB con Python
Il salvataggio dei dati è altrettanto importante quanto la possibilità di recuperarli in seguito senza problemi. Per farlo ci sono vari modi, ma probabilmente il più pratico è quello di utilizzare il metodo MongoDB Find. Applicato all’esempio precedente, si può utilizzare come segue:
dati = collection.find ( { "città" : "Roma" } )
print (dati)
# {
"_id" : ObjectID ("7fe4a462991acf79e22c" ),
"nome" : "Elisa Greco", "indirizzo" : "Viale Sacco e Vanzetti 104",
"cap" : "00155",
"città" : "Roma"
}
Come modificare le voci del database MongoDB con Python
È chiaro che i dati non sono statici. Potrebbe pertanto essere necessario modificare le voci. Grazie alla combinazione di MongoDB e Python, si hanno a disposizione diverse opzioni per adattare i record. In aggiunta alle modifiche di un documento specifico, è possibile apportare modifiche a varie o a tutte le voci di un database o di una raccolta speciale. Tra i metodi adatti rientrano “update_one” e “update_many”.
Esempio di “update_one”
Per illustrare il metodo “update_one” possiamo utilizzare un semplice cambio di indirizzo. Supponiamo quindi che la cliente “Elisa Greco” si sia trasferita rimanendo a Roma. Anziché cancellare la voce e crearne una nuova, è sufficiente modificarla come segue:
import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "elencoclienti" ]
mycol = mydb [ "clienti_italia" ]
myquery = { "indirizzo" : "Viale Sacco e Vanzetti 104" }
newvalues = { "$set" : { "indirizzo" : "Via Matilde di Canossa 28" } }
mycol.update_one (myquery, newvalues)
#print "customer" after the update:
for x in mycol.find ():
print (x)
Esempio per “update_many”
Quando volete modificare tutti i documenti che corrispondono a un determinato criterio, utilizzate il comando “update_many”. In questo esempio, a tutti i clienti il cui nome inizia con “M” viene assegnata una nuova città:
import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "elencoclienti" ]
mycol = mydb [ "clienti_italia" ]
myquery = { "nome" : "$regex" : "^M" }
newvalues = { "$set" : { "città" : "Lecce" } }
x = mycol.update_many (myquery, newvalues)
print (x.modified_count, "documents updated.")
Come eliminare documenti MongoDB con Python
Esiste naturalmente anche la possibilità di eliminare i documenti. La modalità è simile a quella per la modifica di una voce o di più documenti: occorre specificare se devono essere eliminati tutti i documenti che soddisfano determinati criteri o solo uno in particolare. I comandi appositi sono “delete_one” e “delete_many”.
Esempio per “delete_one”
Per eliminare un documento MongoDB con Python, procedete nel modo seguente:
import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "elencoclienti" ]
mycol = mydb [ "clienti_italia" ]
myquery = { "indirizzo" : "Piazza della Pace 6" }
mycol.delete_one (myquery)
Nell’esempio, viene rimossa la voce con l’indirizzo “Piazza della Pace 6”, mentre le altre voci rimangono inalterate.
Esempio di eliminazione di tutte le voci di una raccolta
Quando volete eliminare diverse voci di una raccolta MongoDB, occorre seguire questa procedura:
import pymongo
myclient = pymongo.MongoClient ("<mongodb url="">")</mongodb>
mydb = myclient [ "elencoclienti" ]
mycol = mydb [ "clienti_italia" ]
x = mycol.delete_many ( { } )
print (x.deleted_count, "documents deleted.")
Nel caso di questo esempio, vengono rimosse tutte le voci della raccolta “clienti_italia”, lasciando intatta la raccolta. È possibile, ad esempio, aggiungere altre voci. Ovviamente, è possibile anche eliminarla completamente.