Arquivo

Textos com Etiquetas ‘persistência’

Persistência em Python com módulo Shelve

24, agosto, 2009 eliezer 1 comentário

Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post :) ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do python.

O shelve foi criado para trabalhar com persistência de dicionários (dict) python em arquivo. Para operações simples, configuração, dados não muito grandes, é perfeito. Sua chave sempre deve ser uma string.

Como a maioria dos módulos em python, é tudo muito simples:

Exemplo 1: Vamos salvar uma lista de e-mail em um arquivo

1
2
3
4
5
6
7
import shelve
emails = shelve.open('emails.db')
 
emails["maria"] = "exemplo@maria.com.br"
emails["joao"] = "exemplo@joao.com.br"
 
emails.close()

Recuperando os e-mails

1
2
3
4
5
6
import shelve
emails = shelve.open('emails.db')
 
print emails["maria"]
 
emails.close()


Exemplo 2: Persistência de um objeto mais completo

Criação de um objeto simples

1
2
3
4
5
6
7
class Profile():
   def __init__(self, name, type, username, password=None, auto_login='off'):
   self.name = name
   self.type = type
   self.username = username
   self.password = password
   self.auto_login = auto_login

Classe util para acesso a shelve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import shelve
class Db():
 
  def open(self):
    self.__db = shelve.open("profiles.db")
 
  def close(self):
    self.__db.close()
 
  def add(self, profile):
    self.__db[profile.name] = profile;
 
  def size(self):
    return len(self.__db)
 
  def find_all(self):
    return self.__db.values();
 
  def get(self, key):
    return self.__db[key]
 
  def get_first(self):
    return self.get(self.__db.keys()[0])

Inserindo um perfil

1
2
3
4
5
db = Db()
db.open()
profile = Profile("maria", "user", "mariazinha", "123")
db.add(profile)
db.close()
Categories: Python Tags: ,