DBIx::Custom para acesso ao Banco de Dados
Publicado por Daniel Vinciguerra (última atualização em 15/03/2016)
[ Hits: 3.147 ]
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
SiteCheckSMS - Monitore seu website e receba alertas por SMS
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (16)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









