Persistencia de datos de Python: módulo Shelve
El módulo shelve de la biblioteca estándar de Python proporciona un mecanismo de persistencia de objetos simple pero efectivo. El objeto de estantería definido en este módulo es un objeto similar a un diccionario que se almacena de forma persistente en un archivo de disco. Esto crea un archivo similar a la base de datos dbm en sistemas similares a UNIX.
El diccionario de estantería tiene ciertas restricciones. Solo el tipo de datos de cadena se puede usar como clave en este objeto de diccionario especial, mientras que cualquier objeto de Python seleccionable se puede usar como valor.
El módulo de estantería define tres clases de la siguiente manera:
No Señor | Módulo de estantería y descripción |
---|---|
1 | Shelf Esta es la clase base para implementaciones de estantería. Se inicializa con un objeto similar a dict. |
2 | BsdDbShelf Esta es una subclase de la clase Shelf. El objeto dict pasado a su constructor debe soportar los métodos first (), next (), previous (), last () y set_location (). |
3 | DbfilenameShelf Esta también es una subclase de Shelf, pero acepta un nombre de archivo como parámetro para su constructor en lugar de un objeto dict. |
La función open () definida en el módulo shelve que devuelve un DbfilenameShelf objeto.
open(filename, flag='c', protocol=None, writeback=False)
El parámetro de nombre de archivo se asigna a la base de datos creada. El valor predeterminado para el parámetro de bandera es 'c' para acceso de lectura / escritura. Otros indicadores son 'w' (solo escritura) 'r' (solo lectura) y 'n' (nuevo con lectura / escritura).
La serialización en sí se rige por el protocolo pickle, el valor predeterminado es ninguno. El último parámetro de reescritura del parámetro por defecto es falso. Si se establece en verdadero, las entradas a las que se accede se almacenan en caché. Cada acceso llama a las operaciones sync () y close (), por lo que el proceso puede ser lento.
El siguiente código crea una base de datos y almacena entradas de diccionario en ella.
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
Esto creará el archivo test.dir en el directorio actual y almacenará los datos clave-valor en forma hash. El objeto Shelf tiene los siguientes métodos disponibles:
No Señor. | Métodos y descripción |
---|---|
1 | close() sincronizar y cerrar el objeto dict persistente. |
2 | sync() Escriba todas las entradas en la caché si el estante se abrió con la escritura diferida establecida en Verdadero. |
3 | get() devuelve el valor asociado con la clave |
4 | items() lista de tuplas: cada tupla es un par clave-valor |
5 | keys() lista de llaves de estantería |
6 | pop() eliminar la clave especificada y devolver el valor correspondiente. |
7 | update() Actualizar estante desde otro dictado / iterable |
8 | values() lista de valores de estantería |
Para acceder al valor de una clave en particular en el estante:
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
Como en un objeto de diccionario incorporado, los métodos items (), keys () y values () devuelven objetos de vista.
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
print (list(s.keys()))
['name', 'age', 'marks']
print (list(s.values()))
['Ajay', 25, 75]
Para fusionar elementos de otro diccionario con el método de actualización () del estante.
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]