DBIx::Custom para acesso ao Banco de Dados
Publicado por Daniel Vinciguerra (última atualização em 15/03/2016)
[ Hits: 2.926 ]
Homepage: http://bivee.com.br
IMPORTANTE: este script pretende apenas mostrar de forma introdutória como acessar dados do banco utilizando o DBIx::Custom. Caso necessário verifique as referencias para mais informações.
INTRODUÇÃO
O DBIx::Custom é um wrapper para DBI que tenta trazer benefícios e novas features a forma como nós manipulamos dados de bancos em Perl.
Este módulo, além de fazer com que o trabalho com o banco fique mais simples, também permite que utilizemos algumas features bacanas como: utilizar estrutura de dados Perl no lugar do SQL, placeholders nomeados, suporte a Models, suporte a gerenciamento de conexões e algumas coisinhas a mais.
QUERY USANDO DBI
my $dbh = DBI->connect(...);
my $sth = $dbh->prepare('SELECT * FROM usuario WHERE email = ?');
$sth->execute('usuario@teste.com');
while(my $row = $sth->fetchrow_hashref){
say "Usuário encontrado #$row->{id} - $row->{nome}";
}
QUERY USANDO DBIx::Custom
my $dbi = DBIx::Custom->connect(...);
my $result = $dbi->select(table => 'usuario', where => {email => 'usuario@teste.com'});
while(my $row = $result->fetch_hash){
say "Usuário encontrado #$row->{id} - $row->{nome}";
}
Como puderam ver o código é muito mais limpo, "moderno" e legível que o código usando apenas DBI.
PRÉ-REQUISITOS
- perl 5.10 ou superior
- Módulo DBIx::Custom instalado
- Driver do banco de dados (DBD::mysql, DBD::pg, etc... neste caso DBD::SQLite)
REFERÊNCIAS
https://metacpan.org/pod/DBIx::Custom
https://metacpan.org/pod/DBIx::Custom::Result
https://github.com/yuki-kimoto/DBIx-Custom/wiki
EXECUTANDO
$ perl dbix-custom.pl
#!/usr/bin/env perl # 2016 (c) Daniel Vinciguerra # pragmas use 5.10.0; use strict; use warnings; # imports use Carp; use DBIx::Custom; # exclui arquivo de banco se existir unlink "database.db" if -e 'database.db'; # connectando com o banco my $dbi = DBIx::Custom->connect( dsn => "dbi:SQLite:database=database.db", user => undef, password => undef, ); # executando SQLs eval { $dbi->execute(<<SQL); CREATE TABLE linguagem ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "nome" VARCHAR(20) NOT NULL, "criador" VARCHAR(80) NOT NULL ); SQL $dbi->execute(<<SQL); INSERT INTO linguagem ("nome", "criador") VALUES ('Ruby', 'Yukihiro Matsumoto'), ('Python', 'Guido van Rossum'); SQL }; if(my $ex = $@){ #error Carp::confess("Error: Create Table SQL Error! $ex"); } # obtendo os dados iniciais table_data("DADOS INICIAIS"); # inserindo dados (INSERT) $dbi->insert( { nome => 'Perl', criador => 'Larry' }, table => 'linguagem' ); # obtendo os dados após insert table_data("DADOS APOS INSERT"); # buscando o ID my $result = $dbi->select( ['id'], table => 'linguagem', where => { nome => 'Perl' } ); my $id = eval{ $result->fetch->[0] } || 0; # atualizando os dados (UPDATE) if($id){ $dbi->update( { criador => 'Larry Wall' }, table => 'linguagem', where => { id => $id } ); } # obtendo os dados após update table_data("DADOS APOS UPDATE"); # exclui um dado (DELETE) $dbi->delete( table => 'linguagem', where => [ ':nome{!=}', { nome => 'Perl'} ] ); # obtendo os dados após delete table_data("DADOS APOS DELETE"); ##################################### # imprime todos os dados da tabela ###################################### sub table_data { my $message = shift; eval { # imprime cabeçalho say "\n\n[DEBUG] ${message}:"; say sprintf("%-2s %-10s %-80s", qw/ID NOME CRIADOR/); say '-' x 60; # select na tabela my $result = $dbi->select(table => 'linguagem'); while(my $row = $result->fetch){ say sprintf("%-2s %-10s %-80s", @$row); } }; if(my $ex = $@){ # error Carp::confess("Error: $ex"); } }
DBI Básico - Banco de Dados Perl
Lendo o conteúdo de uma página da Internet
Wallpapers aleatórios no Fluxbox
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta