Python com CouchDB usando couchdbkit
Publicado por Francisco Souza (última atualização em 04/11/2009)
[ Hits: 6.550 ]
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)
Acompanhar status de uma replicação MySQL
Gerar backups de banco de dados MySQL
Nenhum comentário foi encontrado.
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalar Dual Boot, Linux+Windows. (5)
Conky, alerta de temperatura alta (16)
De volta para o futuro - ou melhor, para o presente (parte 2) (3)









