Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

API per Python

Utilizzare PyMongo per l'interfacciamento con MongoDB tramite il linguaggio di programmazione Python: dall'installazione agli esempi d'uso pratici.
Utilizzare PyMongo per l'interfacciamento con MongoDB tramite il linguaggio di programmazione Python: dall'installazione agli esempi d'uso pratici.
Link copiato negli appunti

In questa lezione impareremo ad utilizzare PyMongo, driver ufficiale per l'interfacciamento con MongoDB tramite il linguaggio di programmazione Python. Partiremo dall'installazione, per poi capire come utilizzare questo strumento mediante qualche esempio pratico.

Installazione di PyMongo

Prima di affrontare l'installazione di PyMongo, è bene precisare che in questa sede daremo per scontata l'installazione di Python e di MongoDB. La prima è stata ampiamente affrontata in un'apposita lezione della guida a Python, mentre per l'installazione di MongoDB è sufficiente fare riferimento all'apposita lezione di questa guida.

Il modo più semplice per installare PyMongo è sfruttare le potenzialità di pip. Apriamo quindi il nostro terminale, e digitiamo il comando seguente:

pip install pymongo==3.4.0

Ciò dovrebbe scaricare ed installare automaticamente e senza problemi la versione 3.4.0 di PyMongo. Se qualcosa dovesse andare storto, è bene comunque fare riferimento alla pagina dedicata all'installazione di PyMongo, disponibile sul sito ufficiale.

Possiamo subito verificare se l'installazione è andata a buon fine, semplicemente aprendo un terminale Python e digitando:

import pymongo

Se non ci viene mostrato alcun messaggio di errore, l'installazione è stata effettuata con successo, e possiamo procedere con l'uso di PyMongo.

Utilizzare PyMongo

Dopo l'import, iniziamo subito con la prima operazione richiesta: la connessione al database. Come spesso capita su Python, il tutto si riduce ad appena due righe di codice (import incluso):

from pymongo import MongoClient
client = MongoClient('localhost', 27017)

Il primo parametro che accetta il costruttore della classe MongoClient rappresenta l'indirizzo del DB, mentre il secondo parametro è la porta (27017 è quella standard utilizzata da MongoDB).

Effettuata la connessione, accediamo ora al database che vogliamo utilizzare. Supponiamo che il nostro database si chiami "test". Sfruttiamo la sintassi seguente:

db = client.test

o, in alternativa:

db = client["test"]

La variabile db è quella che ci permetterà di agire sul database test, rappresentato come proprietà dell'oggetto client ottenuto come risultato della connessione.

Inserire documenti

Le operazione di inserimento di documenti all'interno del nostro database richiederà appena 2 linee di codice. La prima ci servirà per specificare in quale collection vogliamo inserire il nostro documento, mentre la seconda linea effettuerà concretamente l'inserimento, tramite il metodo insert_one(). Ecco un semplice esempio chiarificatore:

collection = db.my_collection
doc = {
    'title': 'Titolo',
    'content': 'Contenuto di prova',
    'author': 'HTML.it'
}
result = collection.insert_one(doc)

Se dobbiamo inserire più documenti in una volta, possiamo utilizzare il metodo insert_many(), che risulta più performante dell'uso di più chiamate del metodo insert_one(). Anche in questo caso, un esempio vale più di mille parole:

collection = db.my_collection
doc_1 = {
    'title': 'Titolo1',
    'content': 'Contenuto di prova1',
    'author': 'HTML.it'
}
doc_1 = {
    'title': 'Titolo2',
    'content': 'Contenuto di prova2',
    'author': 'HTML.it'
}
doc_1 = {
    'title': 'Titolo3',
    'content': 'Contenuto di prova3',
    'author': 'HTML.it'
}
new_result = collection.insert_many([doc_1, doc_2, doc_3])

Accedere ai documenti

Per ottenere un documento, utilizzeremo stavolta il metodo find_one():

collection = db.my_collection
html_doc = collection.find_one({'author': 'HTML.it'})
print(html_doc)

L'output sarà simile al seguente:

{
    'author': 'HTML.it',
    'title': 'Titolo2',
    'content': 'Contenuto di prova2',
    '_id': ObjectId('584c4afdea542a766d254241')
}

Il parametro che abbiamo passato al metodo find_one() viene utilizzato per ricercare tutti i documenti appartenenti alla collection che abbiano le proprietà in esso contenuto, e valorizzato come specificato. In questo caso, viene ritornato uno solo dei documenti il cui campo author esiste ed è valorizzato come HTML.it. Si noti la presenza del campo _id, che come sappiamo viene assegnato automaticamente da MongoDB ad ogni documento.

Se volessimo invece ottenere tutti i documenti il cui campo author sia valorizzato come HTML.it, possiamo sfruttare (analogamente a quanto visto per l'inserimento) il metodo find():

collection = db.my_collection
html_docs = collection.find({'author': 'HTML.it'})
print(html_docs)

Questa volta, per accedere ai documenti ottenuti, dovremo sfruttare l'oggetto iterabile che ci viene ritornato dal metodo find(). Possiamo farlo con un semplice ciclo for:

for doc in html_docs:
    print(doc)

Alternative a PyMongo

Sebbene PyMongo sia ben supportato, nonchè driver ufficiale di MongoDB, esistono diverse alternative per interagire con questo database tramite il linguaggio di programmazione Python. Una su tutte è MongoEngine, che in realtà è una libreria che sfrutta PyMongo per rendere più di alto livello le interazione con il database. Sebbene non ci occuperemo in questa sede anche di MongoEngine, è bene essere consapevoli della sua esitenza, e preferirlo sopratutto in produzione, per progetti complessi e di grandi dimensioni.

Ti consigliamo anche