Python com CouchDB usando couchdbkit
Publicado por Francisco Souza (última atualização em 04/11/2009)
[ Hits: 6.185 ]
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)
Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como
Dump MySQL com relatório de logs por e-mail
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Toda vez que tento atualizar o clamav me deparo com erros ao atualizar... (0)
Meu notebook não está funcionando no monitor secundário (2)
Queria saber se existe alguma forma de desistalar programa no ubuntu s... (2)
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (1)