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')]