DBIx::Custom para acesso ao Banco de Dados

Publicado por Daniel Vinciguerra (última atualização em 15/03/2016)

[ Hits: 1.561 ]

Homepage: http://bivee.com.br

Download 6386.dbix-custom.pl




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

  



Esconder código-fonte

#!/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");
    }
}


Scripts recomendados

Teste de conexão com MySQL

DBI Básico - Banco de Dados Perl

SMTP Mass Mail - Enviando e-mails em massa para vários endereços a partir de um servidor SMTP

getter

MoOnCrack


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts