Python com CouchDB usando couchdbkit
Publicado por Francisco Souza (última atualização em 04/11/2009)
[ Hits: 6.182 ]
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
yFone - Yes, outra agenda telefonica escrita em python! ;- )
Backup automatizado de toda a base MySQL
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
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)