Python com CouchDB usando couchdbkit
Publicado por Francisco Souza (última atualização em 04/11/2009)
[ Hits: 6.227 ]
Homepage: http://www.franciscosouza.net
Demonstração do Python acessando um banco de dados CouchDB, usando a biblioteca couchdbkit.
O exemplo é baseado em outro script que já enviei:
Serialização em Python usando picle ( http://www.vivaolinux.com.br/script/Serializacao-em-Python-usando-pickle )
#! /usr/bin/python # coding: utf-8 '''Este módulo cria um pequeno sistema de cadastro de livros usando CouchDB para armazenamento. Requisitos: * couchdbkit: http://couchdbkit.org/ :version: 0.1 :author: Francisco Antônio da Silva Souza :see: http://www.franciscosouza.net/sobre/ ''' from couchdbkit.client import Server from couchdbkit.schema.base import Document from couchdbkit.schema.properties import StringProperty, IntegerProperty import os import sys try: import psyco psyco.full() except: pass MY_DIR = os.path.dirname(os.path.abspath(__file__)) def force_decode(valor): '''Tenta trasnformar uma string em unicode, de forma forçada PARÂMETROS valor (obrigatório) : str Valor a ser transformado em unicode RETORNO Objeto unicode contendo a string transformada. ''' try: resposta = valor.decode('utf-8') except: try: resposta = valor.decode('iso-8859-1') except: resposta = valor return resposta class Autor(Document): nome = StringProperty() class Livro(Document): titulo = StringProperty() edicao = IntegerProperty() class CouchDBManager(object): '''Classe que faz o gerenciamento do banco de dados ''' def __init__(self): self.autores = [] self.livros = [] self.conectar() self.recuperar() def conectar(self): '''Método que efetua conexão com o servidor de banco de dados. ''' self.servidor = Server('http://localhost:5984') self.db = self.servidor.get_or_create_db('livros') Autor.set_db(self.db) Livro.set_db(self.db) def inserir_autor(self, nome): '''Faz a inserção do autor em um atributo (e não no banco). O atributo é uma lista, que é mantida toda em memória, apenas quando o método salvar é chamado que os dados são salvos no banco de dados. ''' autor = Autor() autor.nome = nome self.autores.append(autor) def inserir_livro(self, titulo, edicao, autor): '''Faz a inserção do livro em um atributo (e não no banco). O atributo é uma lista, que é mantida toda em memória, apenas quando o método salvar é chamado que os dados são salvos no banco de dados. ''' livro = Livro() livro.titulo = titulo livro.edicao = edicao livro.autor = autor self.livros.append(livro) def salvar(self): '''Salva os dados das listas de livros e autores no banco de dados. ''' for autor in self.autores: autor.save() for livro in self.livros: livro.save() def recuperar(self): '''Carrega os dados do banco de dados nas listas de autores e livros. ''' self.autores = Autor.view('autores/all').all() self.livros = Livro.view('livros/all', include_docs=True).all() def recriar(self): '''Apaga todos os dados (tanto do banco de dados quanto da memória) e recria as listas vazias. ''' self.servidor.delete_db('livros') self.db = self.servidor.get_or_create_db('livros') self.autores = [] self.livros = [] def inserir_autor(manager): '''Cadastra um novo autor ''' nome = raw_input('Qual o nome do autor? ') nome = force_decode(nome) manager.inserir_autor(nome) print 'Autor %s cadastrado com sucesso!' % nome print def visualizar_autores(manager): '''Visualiza os autores cadastrados ''' print 'LISTA DE AUTORES' ct = 1 for autor in manager.autores: print '[%d] %s' % (ct, autor.nome) ct += 1 print def inserir_livro(manager): titulo = raw_input('Qual o título do livro? ') titulo = force_decode(titulo) edicao = input('Qual a edição do livro? ') visualizar_autores(manager) cd_autor = input('Selecione o código do autor: ') autor = manager.autores[cd_autor - 1].to_json() manager.inserir_livro(titulo, edicao, autor) print 'Livro %s cadastrado com sucesso!' % titulo print def visualizar_livros(manager): '''Visualiza os livros cadastrados ''' print 'LISTA DE LIVROS' ct = 1 for livro in manager.livros: print '[%d] %s (Autor: %s, Edicao: %d)' % (ct, livro.titulo, livro.autor['nome'], livro.edicao) ct += 1 print def salvar(manager): manager.salvar() print 'Dados salvos com sucesso no banco de dados!' print def apagar_tudo(manager): manager.recriar() funcoes = [ inserir_autor, visualizar_autores, inserir_livro, visualizar_livros, salvar, apagar_tudo ] def get_menu(): '''Retorna o texto para o menu. RETORNO: Texto do menu. ''' menu = '''Selecione sua opção: 1 - Inserir um Autor 2 - Visualizar Autores Cadastrados 3 - Inserir um Livro 4 - Visualizar Livros Cadastrados 5 - Salvar os dados no banco 6 - Apagar todos os dados do disco 7 - Sair do sistema Selecione sua opção: ''' return menu def main(args): manager = CouchDBManager() resposta = input(get_menu()) while (resposta < 7): resposta -= 1 funcoes[resposta](manager) resposta = input(get_menu()) print 'Obrigado por usar o programa! :)' if __name__ == '__main__': main(sys.argv)
Backup automatizado de toda a base MySQL
yFone - Yes, outra agenda telefonica escrita em python! ;- )
Gerar backups de banco de dados MySQL
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
PC não liga no filtro de linha (3)
Desde que seja DDR3, posso colocar qualquer memória? (3)
Instalar sem formatar, pergunta meio boba. [RESOLVIDO] (7)
Curso gratuito Defesa de redes 10ª Maratona CiberEducação Cisco Brasil... (0)