Python Data Persistence - Shelve Module

O módulo shelve na biblioteca padrão do Python fornece um mecanismo de persistência de objeto simples, mas eficaz. O objeto de prateleira definido neste módulo é um objeto semelhante a um dicionário que é armazenado de forma persistente em um arquivo de disco. Isso cria um arquivo semelhante ao banco de dados dbm em sistemas semelhantes ao UNIX.

O dicionário de prateleira tem certas restrições. Apenas o tipo de dados string pode ser usado como chave neste objeto de dicionário especial, enquanto qualquer objeto Python selecionável pode ser usado como valor.

O módulo shelve define três classes da seguinte forma -

Sr. Não Módulo Arquivar e Descrição
1

Shelf

Esta é a classe base para implementações de prateleira. Ele é inicializado com um objeto do tipo dict.

2

BsdDbShelf

Esta é uma subclasse da classe Shelf. O objeto dict passado ao seu construtor deve suportar os métodos first (), next (), previous (), last () e set_location ().

3

DbfilenameShelf

Esta também é uma subclasse de Shelf, mas aceita um nome de arquivo como parâmetro para seu construtor em vez de um objeto dict.

A função open () definida no módulo shelve que retorna um DbfilenameShelf objeto.

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

O parâmetro filename é atribuído ao banco de dados criado. O valor padrão do parâmetro sinalizador é 'c' para acesso de leitura / gravação. Outros sinalizadores são 'w' (somente gravação) 'r' (somente leitura) e 'n' (novo com leitura / gravação).

A própria serialização é controlada pelo protocolo pickle, o padrão é nenhum. O último parâmetro de write-back por padrão é falso. Se definido como verdadeiro, as entradas acessadas são armazenadas em cache. Cada acesso chama as operações sync () e close (), portanto, o processo pode ser lento.

O código a seguir cria um banco de dados e armazena entradas de dicionário nele.

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

Isso criará o arquivo test.dir no diretório atual e armazenará os dados de valor-chave em formato hash. O objeto Shelf tem os seguintes métodos disponíveis -

Sr. Não. Métodos e Descrição
1

close()

sincronizar e fechar o objeto dict persistente.

2

sync()

Grave de volta todas as entradas no cache se a prateleira foi aberta com o write-back definido como True.

3

get()

retorna o valor associado à chave

4

items()

lista de tuplas - cada tupla é um par de valores-chave

5

keys()

lista de chaves de prateleira

6

pop()

remove a chave especificada e retorna o valor correspondente.

7

update()

Atualizar prateleira de outro dicionário / iterável

8

values()

lista de valores de prateleira

Para acessar o valor de uma chave específica na prateleira -

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 em um objeto de dicionário embutido, os métodos items (), keys () e values ​​() retornam objetos de visualização.

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 mesclar itens de outro dicionário com prateleira, use o método update ().

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

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