Python Data Persistence - moduł PyMongo
MongoDB jest zorientowanym na dokumenty NoSQLBaza danych. Jest to wieloplatformowa baza danych rozpowszechniana na licencji publicznej po stronie serwera. Używa dokumentów podobnych do JSON jako schematu.
Aby zapewnić możliwość przechowywania ogromnych danych, łączy się ze sobą więcej niż jeden serwer fizyczny (zwany shardami), dzięki czemu uzyskuje się skalowalność poziomą. Baza danych MongoDB składa się z dokumentów.
Dokument jest analogiczny do wiersza w tabeli relacyjnej bazy danych. Jednak nie ma określonego schematu. Dokument to zbiór par klucz-wartość - podobnie jak w słowniku. Jednak liczba par kv w każdym dokumencie może się różnić. Tak jak tabela w relacyjnej bazie danych ma klucz podstawowy, tak dokument w bazie danych MongoDB ma specjalny klucz o nazwie"_id".
Zanim zobaczymy, w jaki sposób baza danych MongoDB jest używana z Pythonem, pokrótce wyjaśnijmy, jak zainstalować i uruchomić MongoDB. Dostępna jest społeczna i komercyjna wersja MongoDB. Wersję społeczności można pobrać ze strony www.mongodb.com/download-center/community .
Zakładając, że MongoDB jest zainstalowane w c: \ mongodb, serwer można wywołać za pomocą następującego polecenia.
c:\mongodb\bin>mongod
Serwer MongoDB jest domyślnie aktywny pod numerem portu 22017. Bazy danych są domyślnie przechowywane w folderze data / bin, chociaż lokalizację można zmienić opcją –dbpath.
MongoDB ma własny zestaw poleceń, których można używać w powłoce MongoDB. Aby wywołać powłokę, użyjMongo Komenda.
x:\mongodb\bin>mongo
Pojawia się zachęta powłoki podobna do zachęty powłoki MySQL lub SQLite, przed którą można wykonać natywne polecenia NoSQL. Interesuje nas jednak połączenie bazy danych MongoDB z Pythonem.
PyMongomoduł został opracowany przez samą MongoDB Inc w celu zapewnienia interfejsu programowania Python. Użyj dobrze znanego narzędzia pip, aby zainstalować PyMongo.
pip3 install pymongo
Zakładając, że serwer MongoDB działa i działa (z mongod polecenie) i nasłuchuje na porcie 22017, najpierw musimy zadeklarować plik MongoClientobiekt. Kontroluje wszystkie transakcje między sesją Pythona a bazą danych.
from pymongo import MongoClient
client=MongoClient()
Użyj tego obiektu klienta, aby nawiązać połączenie z serwerem MongoDB.
client = MongoClient('localhost', 27017)
Nowa baza danych jest tworzona za pomocą następującego polecenia.
db=client.newdb
Baza danych MongoDB może mieć wiele kolekcji, podobnie jak tabele w relacyjnej bazie danych. Obiekt Collection jest tworzony przezCreate_collection() funkcjonować.
db.create_collection('students')
Teraz możemy dodać jeden lub więcej dokumentów do kolekcji w następujący sposób -
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()
Aby pobrać dokumenty (podobnie jak w zapytaniu SELECT), powinniśmy użyć find()metoda. Zwraca kursor, za pomocą którego można uzyskać wszystkie dokumenty.
students=db['students']
docs=students.find()
for doc in docs:
print (doc['Name'], doc['age'], doc['marks'] )
Aby znaleźć konkretny dokument zamiast wszystkich w kolekcji, musimy zastosować filter do metody find (). Filtr używa operatorów logicznych. MongoDB ma własny zestaw operatorów logicznych, jak poniżej -
Sr.No | Operator MongoDB i tradycyjny operator logiczny |
---|---|
1 | $eq równe (==) |
2 | $gt większe niż (>) |
3 | $gte większy lub równy (> =) |
4 | $in jeśli równa się dowolnej wartości w tablicy |
5 | $lt mniej niż (<) |
6 | $lte mniejszy lub równy (<=) |
7 | $ne różne od (! =) |
8 | $nin jeśli nie jest równa żadnej wartości w tablicy |
Na przykład jesteśmy zainteresowani uzyskaniem listy uczniów starszych niż 21 lat. Użycie operatora $ gt w filtrze dlafind() metoda w następujący sposób -
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
print (doc.get('Name'), doc.get('age'), doc.get('marks'))
Moduł PyMongo zapewnia update_one() i update_many() metody modyfikowania jednego dokumentu lub więcej niż jednego dokumentu spełniającego określone wyrażenie filtru.
Zaktualizujmy atrybut znaków dokumentu o nazwie 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()