MongoDB World is back in NYC June 7 - 9!MongoDB World is back in NYC June 7 - 9!

Come utilizzare Python con MongoDB

Seguici passo passo con Atlas
Connettiti gratuitamente oggi

Python, il principale linguaggio di programmazione per i dati, e MongoDB, con il suo schema flessibile e dinamico, sono una coppia perfetta per la creazione di moderne applicazioni web, API JSON, processori di dati e tanto altro. MongoDB dispone di un driver nativo per Python e può contare su un intero team di ingegneri impegnati a garantire che MongoDB e Python funzionino insieme.

Sommario
Cos'è Python?

Python, il coltellino svizzero degli attuali linguaggi a tipizzazione dinamica, ha un supporto completo per le più comuni attività di manipolazione ed elaborazione dei dati, il che lo rende uno dei migliori linguaggi di programmazione per la scienza dei dati e lo sviluppo web. Il dizionario nativo di Python e i tipi di dati degli elenchi lo rendono secondo solo a JavaScript per la manipolazione di documenti JSON e adatto a lavorare con BSON. PyMongo, la libreria di driver MongoDB standard per Python, è facile da usare e offre un'API intuitiva per accedere a database, collection e documenti.

Gli oggetti recuperati da MongoDB tramite PyMongo sono compatibili con dizionari ed elenchi, quindi possiamo facilmente manipolarli, iterarli e stamparli.

Come vengono memorizzati i dati in MongoDB

MongoDB memorizza i dati in documenti di tipo JSON:

I dizionari Python hanno questo aspetto:

Continua a leggere per scoprire come iniziare e sfruttare il potenziale di questa potente combinazione.

Prerequisiti

Scarica e installa Python sulla macchina. Per verificare se l'installazione è corretta, digita python --version nel terminale della riga di comando. Dovresti ottenere qualcosa di simile a questo:

Puoi seguire gli esempi di Python MongoDB in questo tutorial anche se non hai esperienza con Python.

Ti consigliamo di configurare un cluster di livello gratuito Atlas di MongoDB per poter seguire meglio questo tutorial.
Avvia subito il tuo cluster gratuito
Scopri di più su Atlas
Collegare Python e MongoDB Atlas

PyMongo ha un set di pacchetti per l'interazione Python MongoDB. Per il seguente tutorial, inizia creando un ambiente virtuale, e attivalo.

Ora che sei nel tuo ambiente virtuale, puoi installare PyMongo. Nel tuo terminale, digita:

Ora possiamo usare PyMongo come libreria Python MongoDB nel nostro codice con un'istruzione import.

Creazione di un database MongoDB in Python

Il primo passo per connettere Python ad Atlas è creare un cluster. Puoi seguire le istruzioni della documentazione per imparare a creare e configurare il tuo cluster.

Successivamente, crea un file denominato pymongo_get_database.py in qualsiasi cartella per scrivere il codice PyMongo. Puoi usare qualsiasi editor di testo semplice, come Visual Studio Code.

Crea il client MongoDB aggiungendo quanto segue:

Per creare un MongoClient, sarà necessaria una stringa di connessione al database. Se utilizzi Atlas, puoi seguire la procedura descritta nella documentazione per ottenere la stringa di connessione. Usa connection_string per creare il mongoclient e ottenere la connessione al database MongoDB. Modifica nome utente, password e nome del cluster.

In questo tutorial di Python MongoDB, creeremo una lista di acquisti e aggiungeremo alcuni articoli. Per questo motivo, abbiamo creato un database user_shopping_list.

MongoDB non crea un database finché non vi sono raccolte e documenti all'interno. Quindi, il prossimo passo è creare una raccolta.

Creazione di una raccolta in Python

Per creare una raccolta, trasferisci il nome della raccolta nel database. In un nuovo file chiamato pymongo_test_insert.py, aggiungi il codice seguente.

In questo modo creerai una raccolta chiamata user_1_items nel database user_shopping_list.

Inserimento di documenti in Python

Per l'inserimento di più documenti contemporaneamente, utilizza il metodo pymongo insert_many().

Inseriamo un terzo documento senza specificare il campo _id. Questa volta, aggiungiamo un campo di tipo dati ‘date’. Per aggiungere una data utilizzando PyMongo, utilizza il pacchetto Python dateutil.

Inizia l'installazione del pacchetto con il comando seguente:

Aggiungi il codice seguente a pymongo_test_insert.py:

Per inserire un singolo documento, utilizziamo il metodo insert_one().

Apri la riga di comando e vai alla cartella in cui hai salvato pymongo_test_insert.py.

Esegui il file utilizzando il comando:

Colleghiamoci ora all'interfaccia utente MongoDB Atlas e vediamo cosa abbiamo ottenuto finora.

Accedi al cluster Atlas e fai clic sul pulsante Collections.

Sul lato sinistro, puoi vedere il nome del database e della raccolta che abbiamo creato. Se fai clic sul nome della raccolta, puoi visualizzare anche i dati:

visualizzazione del database e della collection
visualizzazione dei dati al clic

Per impostazione predefinita, il campo _id è di tipo ObjectId. Se non specifichiamo il campo _id, MongoDB genera lo stesso risultato. Non tutti i campi presenti in un documento sono presenti in altri. Ma MongoDB non impedisce di inserire dati: questa è l'essenza di un database senza schema.

Se inseriamo di nuovo item_3, MongoDB inserisce un nuovo documento con un nuovo valore _id. Tuttavia, i primi due inserimenti restituiranno un errore a causa del campo _id, l'identificatore univoco.

Interrogazioni in Python

Vediamo tutti i documenti insieme utilizzando find(). A tale scopo, creiamo un file separato pymongo_test_query.py:

Apri la riga di comando e vai alla cartella in cui hai salvato pymongo_test_query.py. Esegui il file utilizzando il comando:

Otteniamo l'elenco degli oggetti dizionari come output:

elenco dizionari

Possiamo visualizzare i dati, ma il formato non è il massimo.Quindi, stampiamo i nomi degli articoli e la relativa categoria sostituendo la riga print con quanto segue:

Sebbene MongoDB ottenga tutti i dati, sul terzo documento visualizziamo un errore 'KeyError' in Python.

Python KeyError

Per gestire gli errori di dati mancanti in Python, utilizza pandas.DataFrames. DataFrames sono strutture di dati 2D utilizzate per le attività di elaborazione dei dati. Il metodo Pymongo find() restituisce oggetti del dizionario che possono essere convertiti in un dataframe in una singola riga di codice.

Installa la libreria pandas in questo modo:

Ora importa la libreria pandas aggiungendo la seguente riga nella parte superiore del file:

E sostituisci il codice del ciclo con quanto segue per gestire KeyError in un unico passaggio:

Gli errori vengono sostituiti da NaN e NaT per i valori mancanti.

NaN e NaT per i valori mancanti.
Indicizzazione in Python MongoDB

Il numero di documenti e raccolte in un database reale aumenta continuamente. La ricerca di documenti specifici, ad esempio quelli che contengono "farina integrale" tra gli ingredienti, può richiedere molto tempo se la raccolta è molto ampia. Gli indici rendono la ricerca nel database più rapida ed efficiente, e riducono il costo delle interrogazioni su operazioni quali ordinamento, conteggio e corrispondenza.

MongoDB definisce gli indici a livello di raccolta.

Affinché l'indice abbia più senso, aggiungi più documenti alla raccolta. Inserisci più documenti contemporaneamente utilizzando il metodo insert_many(). Per i documenti di esempio, copia il codice da github ed esegui python pymongo_test_insert_more_items.py nel terminale.

Supponiamo di voler cercare gli elementi che appartengono alla categoria "cibo":

Per eseguire la query indicata sopra, MongoDB deve eseguire la scansione di tutti i documenti. Per eseguire la verifica, scarica Compass. Connettiti al cluster utilizzando la stringa di connessione. Apri la raccolta e vai alla scheda Explain Plan. In 'filter', fornisci i criteri indicati sopra e visualizza i risultati:

Risultati delle query senza indice

La query analizza 14 documenti per ottenere cinque risultati.

Creiamo un unico indice nel campo 'category'. In un nuovo file denominato pymongo_index.py, aggiungi il codice seguente.

Spiega nuovamente lo stesso filtro sull'interfaccia utente di Compass:

Risultati delle query con indice

Questa volta vengono scansionati solo cinque documenti, poiché abbiamo l'indice delle categorie. Non vediamo differenze significative nei tempi di esecuzione, dato che il numero di documenti è limitato. Il numero di documenti scansionati per la query, però, è molto ridotto.Gli indici aiutano anche nell'ottimizzazione delle prestazioni per le aggregazioni. Le aggregazioni non sono oggetto di questo tutorial, ma, se l'argomento ti interessa, ti rimandiamo a una breve panoramica.

Conclusione

In questo tutorial su Python MongoDB, abbiamo appreso le basi di PyMongo ed eseguito semplici operazioni sul database. Il passo successivo sarà apprendere l'utilizzo di PyMongo per eseguire le operazioni CRUD con dati aziendali. Se non hai già eseguito le operazioni descritte in questo tutorial, inizia subito installando gratuitamente MongoDB Atlas. È inoltre disponibile un corso su questo argomento specifico nella MongoDB University.

Pronto per iniziare?

Lancia un nuovo cluster o passa a MongoDB Atlas e connettiti a Python oggi stesso, senza downtime.
Prova ora

Domande frequenti

Come si connette MongoDB a Python?

Esistono tre modi per connettere MongoDB a Python:

  • PyMongo
    • Il driver nativo per connettere MongoDB e Python. PyMongo ha tutte le librerie per eseguire operazioni sul database dal codice Python. Poiché PyMongo è un driver di basso livello, è veloce e intuitivo e consente maggiore controllo.
  • MongoEngine
    • MongoEngine è un Document Object Mapper. Possiamo definire uno schema che mappa gli oggetti dell'applicazione e i dati del documento.
  • Djongo
    • Usiamo Djongo per applicazioni web Python utilizzando il framework Django. Converte le query SQL esistenti in documenti di query mongodb.

Scopri di più sull'utilizzo di MongoEngine e Djongo.

Quale database è migliore per Python?

Python funziona bene con diversi database. La scelta dipende dalle esigenze del progetto. Grazie al suo schema flessibile e al modo in cui si associa strettamente agli oggetti nativi Python, MongoDB è un'ottima scelta per le applicazioni Python. Ciò rende Python e MongoDB un'ottima scelta per svolgere lavori di sviluppo web.

Per ulteriori informazioni, leggi NoSQL a confronto con database SQL. Esistono anche alcuni database Python nativi, ma non sono popolari e hanno capacità molto limitate.

MongoDB è adatto a Python?

MongoDB archivia i dati in documenti flessibili e senza schema in formato JSON. Python dispone di ricche librerie che elaborano direttamente i formati di dati JSON e BSON. Python si integra bene con MongoDB tramite driver come PyMongo, MongoEngine ecc.

Ciò rende MongoDB adatto a Python, eliminando la rigidità nello schema del database.

Come Python archivia i dati in MongoDB?

Python archivia i dati in MongoDB tramite librerie come PyMongo e MongoEngine. Per le applicazioni web che utilizzano il framework Django, possiamo usare Djongo.

  • PyMongo: PyMongo è il driver Python nativo per il database MongoDB. Poiché è un driver di basso livello, è più veloce e anche il modo preferito per collegare Python e MongoDB.
  • MongoEngine: con MongoEngine possiamo creare uno schema (sì, per un database senza schema). MongoEngine segue l'approccio ODM per mappare le classi delle applicazioni e i documenti del database.
  • Djongo: Djongo è un transpiler SQL. Puoi migrare progetti SQL esistenti su MongoDB senza molte modifiche al codice.

Scopri di più sull'utilizzo di MongoEngine e Djongo.

Come si usa MongoDB con Python?
Possiamo connettere MongoDB con Python usando PyMongo. Pymongo è il driver Python nativo per MongoDB. Ha una sintassi simile a quella di MongoShell, in modo da poter correlare facilmente e utilizzare il metodo giusto. Ad esempio, insertMany() su MongoShell corrisponde a insert_many() in PyMongo. Possiamo connettere Python e MongoDB anche usando MongoEngine e Djongo. Ma l'approccio preferito è utilizzare PyMongo perché è un driver di basso livello che è più veloce e fornisce maggiore controllo. Per ulteriori informazioni su PyMongo, consulta la nostra documentazione su PyMongo.
Come si ottengono dati da MongoDB usando Python?

Il metodo più efficiente e semplice per connettersi a MongoDB in Python è utilizzare PyMongo. PyMongo è il driver Python nativo per MongoDB. Per connetterci, utilizziamo il comando pymongo.MongoClient() con Connection_string come argomento. Quindi, possiamo usare il metodo find() per ottenere i documenti richiesti. Esempio:

 importa PyMongo

# connettiti a MongoDB da Python utilizzando pymongo
client = pymongo.MongoClient(CONNECTION_STRING)
# apri il database
dbname = client['user_shopping_list']
# ottieni la collection
collection_name = dbname["item_details"]
# ottieni i dati dalla collection
item_details = collection_name.find()import pymongo

# connettiti a MongoDB da python usando pymongo
client = pymongo.MongoClient(CONNECTION_STRING)
# apri il database
dbname = client['user_shopping_list']
# ottieni la collection
collection_name = dbname["item_details"]
# ottieni i dati dalla collection
item_details = collection_name.find()
Come si inseriscono i dati in MongoDB usando Python?

Per inserire dati, connetti MongoDB e Python utilizzando PyMongo. PyMongo è il driver Python nativo per MongoDB. Una volta connessi, possiamo utilizzare i metodi di PyMongo come insert_one() e insert_many(). Esempio:

# Ottieni il mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Ottieni/crea il database
dbname = cliente ['user_shopping_list']

# Ottieni/crea una collection
nome_collection = dbname [" item_details "]

# Crea il documento
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Inserisci una riga
nome_collection.insert_one (item_1) # Ottieni mongoclient
client = pymongo.MongoClient(CONNECTION_STRING) 

 # Ottieni/Crea il database
dbname = client['user_shopping_list']

# Ottieni/Crea la collection
collection_name = dbname["item_details"]

# Crea il documento
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Inserisci una riga
collection_name.inserisci_uno(articolo_1)
Come creare un database in MongoDB usando Python?

Utilizziamo il driver PyMongo per creare un database MongoDB utilizzando il codice Python. Esempio:

importa pymongo

# Ottieni il mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Ottieni/Crea il database
dbname = client['user_shopping_list']import pymongo

# Ottieni il mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Ottieni/Crea il database
dbname = client['user_shopping_list']
Differenza tra database SQL e database NoSQL

I database SQL sono anche detti relational database e i database NoSQL ("non SQL" o "non solo SQL") sono anche detti non relational database. I relational database sono detti relazionali perché si basano sul "modello di dati relazionali" in matematica.

I database SQL archiviano i dati sotto forma di tabelle con righe e colonne fisse. I database NoSQL sono disponibili in molti tipi, ad esempio:

  1. Tipo di documento: documenti JSON

  2. Valore-chiave: coppie di valori-chiave

  3. Colonna larga: l'archivio dati a colonne larghe contiene tabelle con righe e colonne dinamiche

Esempio dei database basati su SQL sono MySQL, Microsoft SQL Server, PostgreSQL e SQLite. Esempi di database NoSQL sono: MongoDB, CouchDB, Redis, DynamoDB ecc.

Per differenze più dettagliate, fare riferimento a SQL a confronto con NoSQL.