Pergunta

É CPAN DBI a melhor interface de banco de dados para usar em Perl para uso geral de banco de dados?Existem algumas opções melhores?

Foi útil?

Solução

Se você está apenas procurando acesso ao banco de dados de baixo nível - você o alimenta com qualquer string SQL (opcionalmente com espaços reservados e valores de ligação) e ele executa sua consulta e retorna os resultados - então sim, DBI é sua melhor aposta, de longe.

Se você deseja uma interface de nível superior (ou seja, uma que exija pouco ou nenhum uso de SQL bruto em seu código), existem vários ORMs (mapeadores objeto-relacionais) disponível para Perl.Confira a ORM página no wiki Perl 5 da Perl Foundation para obter mais informações e links.(Se quiser ajuda para escolher entre elas ou tiver dúvidas específicas, você pode restringir o foco desta pergunta ou talvez postar outra.)

Outras dicas

DBI é a interface de "baixo nível" entre Perl e um SGBD.É praticamente a única escolha realista para fazer isso.Comparável ao JDBC em Java.Você seria louco (ou teria um caso de uso muito específico) se escolhesse qualquer coisa diferente de DBI para sua interface de baixo nível entre Perl e um banco de dados.

Além do DBI, existem vários mapeadores objeto/relacionais que tornam o trabalho com um banco de dados muito mais fácil e limpo.

Alguns dos mais comuns/mais populares são

Se você escolheu usar simples DBI Para uma tarefa que não precisa de um ORM, sugiro fortemente que você dê uma olhada DBIX::Simples.

Não é um substituto, mas uma API muito bem projetada além de DBIIsso torna as coisas simples simples e complexas possíveis, sem perder nenhuma das flexões de DBI.

Você já descobriu que precisava procurar coisas aparentemente simples no DBIA documentação, como obter os resultados de uma consulta como um ArrayRef (linhas) de hashes (colunas e seus valores)?Com DBIx::Simple isso é simples:

# DBI
my $rows = $dbh->selectall_arrayref($sql, { Slice => {} });
                 # tell it we want "hashes" (yuck!) ^^^^

# DBIx::Simple
my $rows = $db->query($sql)->hashes; # does the same as the above code underneath!

Dê uma olhada no exemplos para mais.Além disso, a integração com SQL::Resumo facilita consultas simples.Ele o usa em todo o meu código onde eu teria usado DBI Antes, e eu não estou olhando para trás.

Vale ressaltar que a grande maioria das interfaces de "nível superior" (como SQL::Abstract) e (DBIx::Simple) utilizam o próprio DBI quando realmente realizam as consultas.DBI é praticamente o método padrão aceito para conexão de banco de dados em Perl.

Se você quiser trabalhar com objetos (com introspecção!), dê uma olhada em Fey::ORM que implementa ORM baseado em Moose.Ele também possui uma sintaxe muito semelhante ao SQL, por isso se adapta um pouco melhor ao meu cérebro baseado em RDBMS do que algumas outras estruturas ORM.

Dê uma olhada em Classe::DBI também.

Na minha opinião, o DBI é uma escolha muito boa.Eu usei DBD::mysql ativamente e achei que era uma solução muito boa.

Também usamos o módulo DBI em todos os nossos projetos.Muitas vezes construímos um pacote personalizado sobre ele para a aplicação específica, mas abaixo dele está o módulo DBI principal.E muitas vezes é mais fácil usar as funções do módulo DBI diretamente.

O DBI é ótimo, mas a qualidade dos módulos DBD pode variar.Fui mordido por um 'recurso' em uma das versões do DBD:pg.Ele gostava de carregar todos os dados do seu resultado na memória, em vez de interagir com cursores.

Como de costume - programador de advertência.

DBI é demais!mas para um ORM adequado e completo que seja rápido, opte por DBIx::Class o tempo todo.

Basicamente, você deve estar acostumado a usar apenas DBI primeiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top