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.