[Recife-pm] Curso

Marco Aurélio (MACAÉ) marcoaureliomacae em gmail.com
Sexta Julho 31 12:27:59 PDT 2009


Boa tarde, Caro Bruno e Queridos Perl Mongers,

Perdão a todos os participantes da lista Recife Perl Monges, pois
acabei levando a pergunta do Bruno, para privado, eu vou retomar o
assunto aqui na, lista para que todos possam ver, e alias aconselho a
todos fazerem o mesmo, na hora de responder pelo Gmail, clicar no
canto superior da direita da mensagem, em uma seta apontada para
baixo, após isso clicar em: na opção: Responder à todos.

• Instalando os módulos necessários:

A sua pergunta está ótima, bom já que você está precisando de uns
códigos frescos e simples, posso começar indicado o módulo principal
da linguagem Perl e do CPAN [1], para conexão com o Banco de Dados, o
DBI [2], um ótimo módulo criado por Tim Bunce e mantido ativamente com
a ajuda da comunidade internacional, com ele é possível conectar a
quase todos os bancos de dados relacionais em especial o Mysql ou
PostgreSQL que são livres. Para conectar o módulo DBI a um servidor de
banco de dados Mysql ou PostgreSQL , será necessário instalar os
módulos abençoados DBD::mysql [3] ou DBD::Pg [4], o primeiro criado
por Jochen Wiedmann e o segundo criado por Edmund Mergl , os dois
mantidos ativamente pela comunidade internacional. Se você estiver
utilizando o Windows eu aconselho você ler este artigo: “Como
instalar, passo a passo o: Apache, Mysql, Perl e módulos necessários
do CPAN no Windows Como instalar, passo a passo o: Apache, Mysql, Perl
e módulos necessários do CPAN no Windows” [5].

Utilizando o Linux é mais fácil ainda porque ele já vem com o a
distribuição do compilador Perl mais atual, como parte do essencial do
sistema operacional, então instale o servidor Mysql, e use o
instalador do CPAN [6] para instalar o DBI e DBD::mysql, digite na
linha de comando:

Shell_lixun> cpan (Caso o instalador interativo não esteja instalado:
Shell_lixun> perl -MCPAN -e Shell)
cpan> install DBI
cpan> install DBD::mysql
cpan> install DBD::Pg

• Escrevendo o código Perl para conectar a um banco de dados relacional

Uma vez instalado os módulos necessários agora é a parte mais
importante escrever o código Perl para conectar a um banco de dados
relacional, abaixo segue este procedimento para conexões simples,
existem outros métodos mais avançados, porém eu não aconselho para
programadores iniciantes como o: DBIx::Class [7], Class::DBI [8] e
SQL::Translator [9]; estes módulos são ferramentas para mapeamento de
objeto-relacional  ou ORM [10], com esta técnica, o programador não
precisa de se preocupar com os comandos em linguagem SQL, porém o
código vai ficar pouco didático para programadores iniciantes e mais
limpo para programadores avançados, você também pode separar os
comandos em linguagem SQL do seu código usando o módulo SQL::Library
[11].

1 - Os módulos abaixo são citados para melhoria dos códigos, a palavra
reservada use é uma instrução que carrega módulos no seu programa, os
módulos warnings e strict, ajudam muito durante o desenvolvimento do
programa, lhe avisando mais facilmente de possíveis erros como
variáveis indefinidas entre outras coisas.

  #!/usr/bin/perl
  use warnings;
  use strict;

2 - Conectando a um o Banco de Dados Mysql no servidor local:

  use DBI;
  $dbh = DBI->connect('DBI:mysql:nome_banco_dados', 'nome_usuário',
'senha' ) || die " Não foi possível conectar-se ao banco de     dados:
$DBI::errstr";

  # (Aqui você deve inserir os exemplos abaixo de consulta, inserção,
atualização e exclusão...)

  $sth->dbi_commit;
  $dbh->disconnect();

3 - Conectando a um banco de Dados em um servidor diferente:

  $dbh = DBI->connect('DBI:mysql:
nome_banco_dados;host=db.example.com', 'nome_usuário', 'senha',{
RaiseError => 1 });

4 - Fazendo uma consulta simples:

  $sth = $dbh->prepare('SELECT nome_registro FROM tabela_exemplo WHERE id=1');
  $sth->execute();
  $result = $sth->fetchrow_hashref();
  print " Valor retornado: $result->{nome_ registro}\n";

5 - Fazendo uma consulta usando a técnica mais segura contra SQL
Injection [12], um placeholders é o caractere ‘?’, no query, para
programar a passagem de parâmetro, leia sobre esta técnica na
documentação do DBI.

  $sth = $dbh->prepare('SELECT nome_registro FROM tabela_exemplo WHERE
nome_registro=?', undef, 'Mundo');
  @result = $sth->fetchrow_array();
  print "Resultado de Nome_registro  com a palavra Mundo é $result[0]\n";

6 - Inserção de registros no Banco de Dados usando a técnica de placeholders:

  $sth = $dbh->prepare('INSERT INTO tabela_exemplo VALUES ( ?,?)');
  $res = $sth->execute( $numero_registro, $nome_registro );

7 – Atualizando um registro no Banco de Dados usando a técnica de placeholders:

  $sth = $dbh->prepare(“UPDATE tabela_exemplo SET nome_registro = ?
WHERE nome_registro LIKE 'Mundo' ”);
  $res = $sth->execute($nome_registro);

8 – Excluindo um registro no Banco de Dados usando a técnica de placeholders:
  $sth = $dbh->prepare(“DELETE FROM tabela_exemplo WHERE
(nome_registro = ?)”);
  $res = $sth->execute($nome_registro);

9 – Imprimindo vários resultados em lista de resultados:

  $sth = $dbh->prepare('SELECT nome_registro FROM tabela_exemplo);
  $sth->execute();
  while($conteudo = $sth->fetchrow_hashref()) { print
$conteudo->{'nome_registro'}; }

Boa sorte e sintam-se a vontade para corrigir qual quer erro
encontrado neste artigo.

Abraços colaborativos,
Marco Aurélio (MACAÉ)

Fontes:
1- CPAN - Comprehensive Perl Archive Network (Rede de Repositórios Perl)
http://pt.wikipedia.org/wiki/CPAN

2 - DBI - Database independent interface for Perl:
http://search.cpan.org/~timb/DBI/DBI.pm

3 - DBD::mysql - MySQL driver for the Perl5 Database Interface (DBI):
http://search.cpan.org/~capttofu/DBD-mysql-4.012/lib/DBD/mysql.pm

4 - DBD::Pg - PostgreSQL database driver for the DBI module:
http://search.cpan.org/~turnstep/DBD-Pg-2.14.1/Pg.pm

5 - CPAN - query, download and build perl modules from CPAN sites
http://search.cpan.org/~jhi/perl-5.8.0/lib/CPAN.pm

6 - Como instalar, passo a passo o: Apache, Mysql, Perl e módulos
necessários do CPAN no Windows:
http://perl.org.br/Artigos/ArtigoMarcoAurelioMACAE2009x07x29

7 - DBIx::Class - Extensible and flexible object <-> relational mapper:
http://search.cpan.org/~ribasushi/DBIx-Class-0.08108/lib/DBIx/Class.pm

8 - Class::DBI - Simple Database Abstraction:
http://search.cpan.org/~tmtm/Class-DBI-v3.0.17/lib/Class/DBI.pm

9 - SQL::Translator - manipulate structured data definitions (SQL and more):
http://search.cpan.org/~jrobinson/SQL-Translator-0.09007/lib/SQL/Translator.pm

10 - Mapeamento objecto-relacional (ou ORM):
http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional

11 - Sql injection
http://pt.wikipedia.org/wiki/Sql_injection



2009/7/28 Bruno da Fonte <bruno em afonte.com.br>:
> Blz
>
> Primeiramente vou me apresentar, não sou programador por profissão, fiz um
> curso de clipper quando tinha uns 12 anos.... faz tempo... hoje tenho 33,,,,
> a uns 5 anos atraz, vi algo sobre perl na internet, comprei alguns livros e
> comecei a fazer programas por hobby, no qual faço até hoje.... acho uma
> linguagem muito fácil de se entender e com muitos recursos, por isso
> continou nela.
>
> O que preciso é o seguinte....
>
> tenho um site que fiz em perl para públicar os tempos no nosso servidor de
> corridas on line, http://www.afonte.com.br/peracing, neste site alimento um
> arquivo .txt com os tempos, o que gostaria era de colocar estes dados em um
> arquivos tipo banco de dados, no clipper era em .dbf, em perl não sei como
> pode ser, gostaria da forma mais simples, se me mandar um exemplo de
> gravação de novo registro, alteração, exclusçao e leitura, dai pra frente eu
> acho que dá pra fazer sozinho....
>
> No meu site leio logs do nosso servidor, onde sao registrados os tempos e
> voltas e gravo em arquivo .txt
>
> Abraços e obrigado pela ajuda.
>
>
>
>
>
>
> 2009/7/27 Marco Aurélio (MACAÉ) <marcoaureliomacae em gmail.com>
>>
>> Boa tarde, Caro Bruno,
>>
>> Primeiramente, abra seu coração, aqui você pode se sentir em casa seja
>> sempre bem vindo ao Mosteiro dos Perl Mongers Recifenses, nos conte
>> como você se sente aqui. Juntos, unidos, e lutando disseminamos código
>> livre pelo amor a linguagem Perl.
>> Quando você tiver uma dúvida sobre Perl e/ou sobre qualquer assunto
>> como lazer, esporte, vamos responder com orgulho, de preferência “OT:”
>> (Off-Tópic - Fora do assunto da lista), antes do assunto.
>>
>> 2009/7/26 Bruno da Fonte <bruno em afonte.com.br>:
>> > Ola, alguém indicaria um curso de Perl com banco de dados free em
>> > Recife.
>> > Obrigado
>>
>> Você pode estudar em um curso presencial e/ou à distância, à
>> preferência é sua; podemos construir dentro da nossa humilde estrutura
>> um curso presencial em um futuro próximo. Ao contrario dos de alguns
>> grupos nacionais como Rio-pm e São Paulo-pm, ainda não temos trabalhos
>> em grupo para programadores iniciantes e avançados, lembrando que
>> somos todos voluntários.
>>
>> Eu estou reunindo para os monges da nossa lista, módulos e publicações
>> práticas e livres, onde você poderá aprender a distancia, quais são os
>> estilos possíveis de conectar o código Perl com os Bancos de Dados
>> livres, em breve eu vou posta aqui.
>>
>> Abraços colaborativos,
>> Marco Aurélio (MACAÉ)
>>
>
>
>
> --
>
> Bruno da Fonte
>


Mais detalhes sobre a lista de discussão Recife-pm