Se state pensando di uti­liz­za­re MongoDB con Python, la soluzione migliore è PyMongo. Questa libreria di driver standard è molto semplice e chiara e offre la pos­si­bi­li­tà di creare e mo­di­fi­ca­re database e raccolte per­so­na­liz­za­te in modo sem­pli­cis­si­mo.

Che cos’è PyMongo?

Da qualche anno il sistema di gestione di database NoSQL MongoDB è diventato una vera e propria al­ter­na­ti­va a MySQL. Il suo grande valore aggiunto è che, grazie ad appositi driver, vi permette di uti­liz­za­re il lin­guag­gio di pro­gram­ma­zio­ne che preferite per rap­pre­sen­ta­re gli oggetti. PyMongo è il pacchetto driver ufficiale che consente di con­trol­la­re MongoDB con Python.

N.B.

MongoDB salva i dati come documenti JSON, i quali vengono rag­grup­pa­ti e in­di­ciz­za­ti in raccolte per una migliore clas­si­fi­ca­zio­ne. Uti­liz­zan­do i vari comandi di MongoDB, è possibile re­cu­pe­ra­re, ordinare, mo­di­fi­ca­re, combinare ed eliminare i dati.

Come in­stal­la­re PyMongo

Per sfruttare la libreria di driver al fine di uti­liz­za­re MongoDB con Python, occorre avvalersi del gestore di pacchetti Python PIP. Grazie a questo è possibile in­stal­la­re PyMongo in qualsiasi momento sul di­spo­si­ti­vo o sul server su cui MongoDB è in ese­cu­zio­ne. Il comando per farlo è il seguente:

python -m pip install pymongo

Come creare database in MongoDB con Python

Dopo aver in­stal­la­to PyMongo, stabilite la con­nes­sio­ne a MongoDB. A tale scopo, occorre servirsi del Mon­go­Client. Di seguito è riportato il comando opportuno (so­sti­tui­te il se­gna­po­sto “<<MongoDB URL>>” con la ri­spet­ti­va stringa di con­nes­sio­ne):

from pymongo import MongoClient 
datenbank = MongoClient ('<<MongoDB URL>>')

MongoDB dispone di tre database pre­de­fi­ni­ti: local, admin e config. Se però de­si­de­ra­te sfruttare MongoDB in modo efficace con Python, dovrete disporre di altri database. Per crearli è suf­fi­cien­te inserire l’ab­bre­via­zio­ne “db”. Il database spe­ci­fi­ca­to verrà re­cu­pe­ra­to se esiste già. Se non esiste ancora un database con il nome in questione, MongoDB lo creerà per voi. Per un nuovo database chiamato “elen­co­clien­ti”, il comando è il seguente:

db = client.elencoclienti

Per pro­teg­ge­re ul­te­rior­men­te i dati, a questo punto si può impostare una procedura di au­ten­ti­ca­zio­ne. Per im­po­sta­zio­ne pre­de­fi­ni­ta, i ri­spet­ti­vi dati sono me­mo­riz­za­ti nel database “admin”. Per inserire un’au­ten­ti­ca­zio­ne, si procede in questo modo:

connection = MongoClient ("localhost",
username = "user",
password = "password",
authSource = "admin",
authMechanism = "SCRAM-SHA-256")

Come ag­giun­ge­re raccolte con PyMongo

Quando avrete creato un database, potrete ag­giun­ge­re fa­cil­men­te delle raccolte. Queste ultime, tuttavia, saranno prese in con­si­de­ra­zio­ne dal sistema solo se con­te­nen­ti ef­fet­ti­va­men­te dei documenti. Per creare una nuova raccolta in MongoDB con Python, inserite quanto segue:

collection = database ["clienti_italia"]
Consiglio: MongoDB gestito da IONOS

Con Managed MongoDB from IONOS enables you to con­cen­tra­te on the es­sen­tials. From in­stal­la­tion to operation and main­te­nan­ce work, IONOS makes sure you always get the best per­for­man­ce from your data banks.

Come inserire voci nel database MongoDB con Python

Ora potete ag­giun­ge­re contenuti a questa nuova raccolta. I nuovi dati vengono me­mo­riz­za­ti lì e possono essere re­cu­pe­ra­ti, combinati o mo­di­fi­ca­ti 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 ag­giun­ge­re voci anche in modo col­let­ti­vo. Per ciascuna di queste voci viene au­to­ma­ti­ca­men­te creato un campo “_id” in­di­vi­dua­le e unico, mediante il quale è possibile se­le­zio­nar­le e uti­liz­zar­le sin­go­lar­men­te anche in seguito. Ag­giun­ge­re 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 sal­va­tag­gio dei dati è al­tret­tan­to im­por­tan­te quanto la pos­si­bi­li­tà di re­cu­pe­rar­li in seguito senza problemi. Per farlo ci sono vari modi, ma pro­ba­bil­men­te il più pratico è quello di uti­liz­za­re il metodo MongoDB Find. Applicato all’esempio pre­ce­den­te, si può uti­liz­za­re 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 mo­di­fi­ca­re le voci del database MongoDB con Python

È chiaro che i dati non sono statici. Potrebbe pertanto essere ne­ces­sa­rio mo­di­fi­ca­re le voci. Grazie alla com­bi­na­zio­ne di MongoDB e Python, si hanno a di­spo­si­zio­ne 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 il­lu­stra­re il metodo “update_one” possiamo uti­liz­za­re un semplice cambio di indirizzo. Sup­po­nia­mo quindi che la cliente “Elisa Greco” si sia tra­sfe­ri­ta rimanendo a Roma. Anziché can­cel­la­re la voce e crearne una nuova, è suf­fi­cien­te mo­di­fi­car­la 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 mo­di­fi­ca­re tutti i documenti che cor­ri­spon­do­no a un de­ter­mi­na­to criterio, uti­liz­za­te 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 na­tu­ral­men­te anche la pos­si­bi­li­tà di eliminare i documenti. La modalità è simile a quella per la modifica di una voce o di più documenti: occorre spe­ci­fi­ca­re se devono essere eliminati tutti i documenti che sod­di­sfa­no de­ter­mi­na­ti criteri o solo uno in par­ti­co­la­re. 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 inal­te­ra­te.

Esempio di eli­mi­na­zio­ne 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, ag­giun­ge­re altre voci. Ov­via­men­te, è possibile anche eli­mi­nar­la com­ple­ta­men­te.

Vai al menu prin­ci­pa­le