Continuando os outros tutoriais do WebPy, vamos agora abordar o acesso à bando de dados usando o WebPy.
***
Acima da linha web.run adicione:
web.db_parameters = dict(dbn='postgres', user='me', pw='pass', db='dbname')
* Lembre-se de sempre pôr essa linha antes de chamar o web.run, caso contrário não haverá efeito e vários erros e exceções aparecerão
na sua tela.
Os valores passados como argumento para a função dict devem ser customizados à sua necessidade. ( Por exemplo, você pode
querer trocar o dbn para mysql ). Esses, MySql e PostgreSql, são os únicos bancos de dados suportados pelo WebPy até a atual versão.
Crie um simples tabela no seu banco de dados usando o código abaixo:
CREATE TABLE todo (
id serial primary key,
title text,
created timestamp default now(),
done boolean default 'f'
);
Crie um registro para servir de exemplo usando o seguinte código:
INSERT INTO todo (title) VALUES ('Learn web.py');
Volte para o código exemplo usado nesse tutorial, code.py, e ponha a seguinte linha logo no começo do bloco referente ao método view.GET
todos = web.select("todo")
Agora edite o template que também estamos usando nesse tutorial, o view.html, e altere o seu conteúdo para:
<ul>
#for todo in $todos
<li id="t$todo.id">$todo.title</li>
#end for
</ul>
Rode o arquivo code.py e visite seu localhost, provavelmente você verá um item na pagina: "Learn web.py".
***
Agora vamos ir mais fundo no uso de banco de dados. Adicione no final do arquivo template view.html:
<form method="post" action="add">
<p><input type="text" name="title" /> <input type="submit" value="Add" /></p>
</form>
Altere o code.py, na variável urls para que ela fique da seguinte maneira:
'/', 'view',
'/add', 'add'
Ainda no code.py faça as seguintes alterações:
1) Altere a definição do método GET da classe view para o seguinte:
def GET(self):
Assim ele não levará mais nenhum argumento, exceto o self.
2) Logo abaixo da classe view, adicione a seguinte classe com o código:
class add:
def POST(self):
i = web.input()
n = web.insert('todo', title=i.title)
web.seeother('./#t'+str(n))
* Em versões mais antigas do web.py usava-se o método redirect para redirecionar para outras páginas.
Explicando o pedaço de código... O método web.insert retorna o id do novo item adicionado, leva como argumentos o nome da tabela onde
ele vai adicionar um registro e o seguinte esquema: nome_coluna=valor_coluna.
Rapidamente: web.transact() inicia uma transação, web.commit() salva todas as alterações feitas no banco de dados; web.rollback() reverte essas mudanças; web.update() funciona como o web.insert(), só que ao invés de retornar o id, ele toma-o como argumento, ou então uma clausula WHERE.
ps: para maiores referências quanto ao uso dessas funções, visitar: http://webpy.org/documentation
***
Abraços. Até o próximo artigo.