Python com CouchDB usando couchdbkit
Publicado por Francisco Souza (última atualização em 04/11/2009)
[ Hits: 6.457 ]
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
Dump MySQL com relatório de logs por e-mail
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (1)
PIP3 - erro ao instalar módulo do mariadb para o Python (9)
É normal não gostar de KDE? (8)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









