Python Data Persistence - Shelve Module

Il modulo shelve nella libreria standard di Python fornisce un meccanismo di persistenza degli oggetti semplice ma efficace. L'oggetto scaffale definito in questo modulo è un oggetto simile a un dizionario che viene memorizzato in modo persistente in un file su disco. Questo crea un file simile al database dbm su sistemi simili a UNIX.

Il dizionario scaffale ha alcune limitazioni. Solo il tipo di dati stringa può essere utilizzato come chiave in questo oggetto dizionario speciale, mentre qualsiasi oggetto Python selezionabile può essere utilizzato come valore.

Il modulo shelve definisce tre classi come segue:

Suor n Modulo e descrizione di Shelve
1

Shelf

Questa è la classe base per le implementazioni a scaffale. Viene inizializzato con un oggetto tipo dict.

2

BsdDbShelf

Questa è una sottoclasse della classe Shelf. L'oggetto dict passato al suo costruttore deve supportare i metodi first (), next (), previous (), last () e set_location ().

3

DbfilenameShelf

Anche questa è una sottoclasse di Shelf ma accetta un nome di file come parametro per il suo costruttore piuttosto che un oggetto dict.

La funzione open () definita nel modulo shelve che restituisce a DbfilenameShelf oggetto.

open(filename, flag='c', protocol=None, writeback=False)

Il parametro del nome file viene assegnato al database creato. Il valore predefinito per il parametro flag è "c" per l'accesso in lettura / scrittura. Altri flag sono "w" (solo scrittura) "r" (sola lettura) e "n" (nuovo con lettura / scrittura).

La serializzazione stessa è governata dal protocollo pickle, l'impostazione predefinita è nessuno. L'ultimo parametro di writeback del parametro per impostazione predefinita è false. Se impostato su true, le voci a cui si accede vengono memorizzate nella cache. Ogni accesso chiama le operazioni sync () e close (), quindi il processo potrebbe essere lento.

Il codice seguente crea un database e memorizza le voci del dizionario in esso.

import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()

Questo creerà il file test.dir nella directory corrente e memorizzerà i dati dei valori-chiave in formato hash. L'oggetto Shelf ha i seguenti metodi disponibili:

Sr.No. Metodi e descrizione
1

close()

sincronizzare e chiudere l'oggetto dict persistente.

2

sync()

Riscrivi tutte le voci nella cache se lo scaffale è stato aperto con il writeback impostato su True.

3

get()

restituisce il valore associato alla chiave

4

items()

elenco di tuple: ogni tupla è una coppia chiave-valore

5

keys()

elenco delle chiavi di scaffale

6

pop()

rimuove la chiave specificata e restituisce il valore corrispondente.

7

update()

Aggiorna scaffale da un altro dict / iterabile

8

values()

elenco dei valori di scaffale

Per accedere al valore di una particolare chiave nello scaffale:

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

Come in un oggetto dizionario incorporato, i metodi items (), keys () e values ​​() restituiscono oggetti di visualizzazione.

print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]  

print (list(s.keys()))
['name', 'age', 'marks']

print (list(s.values()))
['Ajay', 25, 75]

Per unire elementi di un altro dizionario con il metodo shelf usa update ().

d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))

[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]