Conectando no banco com DBI

by

A interface com banco de dados no Perl é centralizada no módulo DBI. Para este módulo, existem os drivers para cada banco de dados, como DBD::mysql, DBD::pgsql, etc.

No Debian, o Mysql já instala o driver de conexão do Perl automaticamente, mas se não estivesse instalado, para pegar os pacotes da distribuição seria:

# aptitude install libdbi-perl libdbd-mysql-perl

A interface para utilização é bem simples:

#!/usr/bin/perl
 
use strict;
use warnings;
 
use DBI;
 
my $dbh = DBI->connect('dbi:mysql:wordpress', 'nobody', 'nobody');
 
my $sth = $dbh->prepare('SELECT * FROM wp_posts');
$sth->execute();
 
while ( my $row = $sth->fetchrow_hashref ) {
    print $row->{post_title}, "\n";
}

A diferença pra quem está vindo do PHP é que primeiro preparamos a query com o método prepare no objeto da conexão. O método retorna um objeto DBI::st que representa o statement, e então executamos a query com execute.

O legal na verdade é quando utilizamos parâmetros. Preparamos a query com placeholders e passamos os parâmetros pro execute.

Além de evitar preocupação com escapar os dados, queries que serão executadas mais de uma vez com parâmetros diferentes são preparadas uma única vez, com ganhos de performance consideráveis em alguns SGBDs.

$sth = $dbh->prepare('
    SELECT * FROM wp_posts
    WHERE post_author = ?
      AND post_title = ?
');
 
$sth->execute(1, 'Hello world!');
printf "Total de hello world: %d\n", $sth->rows;
 
$sth->execute(1, 'Teste');
printf "Total de teste: %d\n", $sth->rows;

E é isso. Post rápido só pra dar base pra alguma aplicação que a gente queira testar mais pra frente.

Veja a documentação da API pra detalhes interessantes:
http://search.cpan.org/~timb/DBI-1.607/DBI.pm

Obs: Sabe-se que, pelo menos até a versão 5.0, o query cache não funciona no MySQL se utilizado com prepared statements. Já o Oracle consegue guardar o plano de execução, evitando ter que determinar a melhor estragégia de busca a cada query. Com prepared statements o plano de execução fica em cache indepentente dos parâmetros, conseguindo um ganho significativo de performance.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: