Uso di Shelve per salvare oggetti in Python

Shelve è un potente modulo Python per la persistenza degli oggetti. Quando si accantona un oggetto, è necessario assegnare una chiave con cui è noto il valore dell'oggetto. In questo modo, il file shelve diventa un database di valori memorizzati, ognuno dei quali è possibile accedere in qualsiasi momento.

Codice di esempio per Shelve in Python

Per archiviare un oggetto, importare prima il modulo e quindi assegnare il valore dell'oggetto come segue:

 scaffalatura d'importazione
database = shelve.open (nomefile.suffix)
object = Object ()
database ['chiave'] = oggetto

Se si desidera mantenere un database di stock, ad esempio, è possibile adattare il seguente codice:

 scaffalatura d'importazione
stockvalues_db = shelve.open ('stockvalues.db')
object_ibm = Values.ibm ()
stockvalues_db ['ibm'] = object_ibm
object_vmw = Values.vmw ()
stockvalues_db ['vmw'] = object_vmw
object_db = Values.db ()
stockvalues_db ['db'] = object_db

Un "valori valori.db" è già aperto, non è necessario riaprirlo. Piuttosto, puoi aprire più database alla volta, scrivere a ciascuno a piacimento e lasciare che Python li chiuda quando il programma termina. Ad esempio, è possibile mantenere un database separato di nomi per ciascun simbolo, aggiungendo quanto segue al codice precedente:

 ## supponendo che shelve sia già importato
stocknames_db = shelve.open ('stocknames.db')
objectname_ibm = Names.ibm ()
stocknames_db ['ibm'] = objectname_ibm
objectname_vmw = Names.vmw ()
stocknames_db ['vmw'] = objectname_vmw
objectname_db = Names.db ()
stocknames_db ['db'] = objectname_db

Si noti che qualsiasi modifica nel nome o nel suffisso del file di database costituisce un file diverso e, quindi, un database diverso.

Il risultato è un secondo file di database contenente i valori indicati. A differenza della maggior parte dei file scritti in formati personalizzati, i database archiviati vengono salvati in forma binaria.

Dopo che i dati sono stati scritti nel file, possono essere richiamati in qualsiasi momento. Se si desidera ripristinare i dati in una sessione successiva, si riapre il file. Se è la stessa sessione, è sufficiente richiamare il valore; i file di database shelve vengono aperti in modalità lettura-scrittura. Di seguito è riportata la sintassi di base per raggiungere questo obiettivo:

 scaffalatura d'importazione
database = shelve.open (nomefile.suffix)
oggetto = database ['chiave']

Quindi un esempio dell'esempio precedente potrebbe leggere:

 scaffalatura d'importazione
stockname_file = shelve.open ('stocknames.db')
stockname_ibm = stockname_file ['ibm']
stockname_db = stockname_file ['db']

Considerazioni con Shelve

È importante notare che il database rimane aperto fino alla sua chiusura (o fino al termine del programma). Pertanto, se si sta scrivendo un programma di qualsiasi dimensione, si desidera chiudere il database dopo aver lavorato con esso. Altrimenti, l'intero database (non solo il valore desiderato) si trova in memoria e consuma risorse di elaborazione.

Per chiudere un file shelve, utilizzare la sintassi seguente:

 Database.Close () 

Se tutti gli esempi di codice sopra riportati fossero incorporati in un programma, a questo punto avremmo due file di database aperti che consumerebbero memoria. Quindi, dopo aver letto i nomi degli stock nell'esempio precedente, è possibile quindi chiudere ciascun database a turno come segue:

 stockvalues_db.close ()
stocknames_db.close ()
stockname_file.close ()