Python Data Persistence - Modulo PyMongo

MongoDB è un documento orientato NoSQLBanca dati. È un database multipiattaforma distribuito con licenza pubblica lato server. Usa JSON come documenti come schema.

Al fine di fornire la capacità di memorizzare dati enormi, più di un server fisico (chiamato frammenti) è interconnessa, in modo da ottenere una scalabilità orizzontale. Il database MongoDB è costituito da documenti.

Un documento è analogo a una riga in una tabella di database relazionale. Tuttavia, non ha uno schema particolare. Il documento è una raccolta di coppie chiave-valore, simile al dizionario. Tuttavia, il numero di coppie kv in ogni documento può variare. Proprio come una tabella nel database relazionale ha una chiave primaria, il documento nel database MongoDB ha una chiave speciale chiamata"_id".

Prima di vedere come viene utilizzato il database MongoDB con Python, vediamo brevemente come installare e avviare MongoDB. È disponibile la versione comunitaria e commerciale di MongoDB. La versione comunitaria può essere scaricata da www.mongodb.com/download-center/community .

Supponendo che MongoDB sia installato in c: \ mongodb, il server può essere richiamato utilizzando il seguente comando.

c:\mongodb\bin>mongod

Il server MongoDB è attivo alla porta numero 22017 per impostazione predefinita. I database vengono archiviati nella cartella data / bin per impostazione predefinita, sebbene la posizione possa essere modificata mediante l'opzione –dbpath.

MongoDB ha il proprio set di comandi da utilizzare in una shell MongoDB. Per invocare la shell, usaMongo comando.

x:\mongodb\bin>mongo

Viene visualizzato un prompt della shell simile a MySQL o SQLite prima del quale è possibile eseguire i comandi NoSQL nativi. Tuttavia, siamo interessati a connettere il database MongoDB a Python.

PyMongoIl modulo è stato sviluppato dalla stessa MongoDB Inc per fornire l'interfaccia di programmazione Python. Usa il noto programma di utilità pip per installare PyMongo.

pip3 install pymongo

Supponendo che il server MongoDB sia attivo e in esecuzione (con mongod comando) ed è in ascolto sulla porta 22017, dobbiamo prima dichiarare un file MongoClientoggetto. Controlla tutte le transazioni tra la sessione Python e il database.

from pymongo import MongoClient
client=MongoClient()

Usa questo oggetto client per stabilire la connessione con il server MongoDB.

client = MongoClient('localhost', 27017)

Viene creato un nuovo database con il seguente comando.

db=client.newdb

Il database MongoDB può avere molte raccolte, simili alle tabelle in un database relazionale. Un oggetto Collection viene creato daCreate_collection() funzione.

db.create_collection('students')

Ora possiamo aggiungere uno o più documenti nella raccolta come segue:

from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()

Per recuperare i documenti (simile alla query SELECT), dovremmo usare find()metodo. Restituisce un cursore con l'aiuto del quale è possibile ottenere tutti i documenti.

students=db['students']
docs=students.find()
for doc in docs:
   print (doc['Name'], doc['age'], doc['marks'] )

Per trovare un particolare documento invece di tutti in una raccolta, dobbiamo applicare il filtro al metodo find (). Il filtro utilizza operatori logici. MongoDB ha il proprio set di operatori logici come di seguito:

Suor n Operatore MongoDB e operatore logico tradizionale
1

$eq

uguale a (==)

2

$gt

maggiore di (>)

3

$gte

maggiore o uguale a (> =)

4

$in

se uguale a qualsiasi valore in array

5

$lt

minore di (<)

6

$lte

minore o uguale a (<=)

7

$ne

diverso da (! =)

8

$nin

se non è uguale a qualsiasi valore in array

Ad esempio, siamo interessati a ottenere un elenco di studenti di età superiore ai 21 anni. Utilizzo dell'operatore $ gt nel filtro perfind() metodo come segue -

students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
   print (doc.get('Name'), doc.get('age'), doc.get('marks'))

Il modulo PyMongo fornisce update_one() e update_many() metodi per modificare uno o più documenti che soddisfano un'espressione di filtro specifica.

Aggiorniamo l'attributo mark di un documento il cui nome è Juhi.

from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()