Python Data Persistence - moduł Shelve
Moduł shelve w standardowej bibliotece Pythona zapewnia prosty, ale skuteczny mechanizm trwałości obiektów. Obiekt półki zdefiniowany w tym module jest obiektem podobnym do słownika, który jest trwale przechowywany w pliku dyskowym. Tworzy to plik podobny do bazy danych dbm w systemach typu UNIX.
Słownik półkowy ma pewne ograniczenia. W tym specjalnym obiekcie słownika jako klucza można użyć tylko typu danych typu string, natomiast jako wartość można użyć dowolnego obiektu Pythona, który można wybrać.
Moduł półki definiuje trzy klasy w następujący sposób -
Sr.No | Moduł półki i opis |
---|---|
1 | Shelf To jest klasa bazowa dla implementacji półek. Jest inicjalizowany za pomocą obiektu podobnego do dyktowania. |
2 | BsdDbShelf To jest podklasa klasy Shelf. Obiekt dict przekazany do jego konstruktora musi obsługiwać metody first (), next (), previous (), last () i set_location (). |
3 | DbfilenameShelf Jest to również podklasa Shelf, ale akceptuje nazwę pliku jako parametr konstruktora zamiast obiektu dict. |
Funkcja open () zdefiniowana w module shelve, która zwraca plik DbfilenameShelf obiekt.
open(filename, flag='c', protocol=None, writeback=False)
Do utworzonej bazy danych przypisywany jest parametr nazwa_pliku. Domyślną wartością parametru flagi jest „c” dla dostępu do odczytu / zapisu. Inne flagi to „w” (tylko do zapisu) „r” (tylko do odczytu) i „n” (nowe z możliwością odczytu / zapisu).
Sama serializacja jest zarządzana przez protokół pickle, domyślnie brak. Domyślnym parametrem zapisywania zwrotnego ostatniego parametru jest false. Jeśli ma wartość true, pozycje, do których uzyskano dostęp, są buforowane. Każdy dostęp wywołuje operacje sync () i close (), stąd proces może być powolny.
Poniższy kod tworzy bazę danych i przechowuje w niej wpisy słownika.
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
Spowoduje to utworzenie pliku test.dir w bieżącym katalogu i przechowywanie danych klucz-wartość w postaci zaszyfrowanej. Obiekt Shelf ma dostępne następujące metody -
Sr.No. | Metody i opis |
---|---|
1 | close() zsynchronizuj i zamknij trwały obiekt dict. |
2 | sync() Zapisz wszystkie wpisy w pamięci podręcznej, jeśli półka została otwarta z zapisem zwrotnym ustawionym na True. |
3 | get() zwraca wartość skojarzoną z kluczem |
4 | items() lista krotek - każda krotka to para klucz-wartość |
5 | keys() lista kluczy półek |
6 | pop() usuń określony klucz i zwróć odpowiednią wartość. |
7 | update() Zaktualizuj półkę z innego dyktu / iterowalnego |
8 | values() lista wartości półek |
Aby uzyskać dostęp do wartości określonego klucza na półce -
s=shelve.open('test')
print (s['age']) #this will print 23
s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair
Podobnie jak w przypadku wbudowanego obiektu słownika, metody items (), keys () i values () zwracają obiekty widoku.
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
print (list(s.keys()))
['name', 'age', 'marks']
print (list(s.values()))
['Ajay', 25, 75]
Aby połączyć pozycje z innego słownika z półką, użyj metody update ().
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]