我应该使用哪个Perl数据库接口?

我应该使用哪个Perl数据库接口?,perl,dbi,cpan,Perl,Dbi,Cpan,对于一般的数据库使用,Perl中使用的最好的数据库接口是什么?有更好的选择吗?也来看看。在我看来,DBI是一个非常好的选择。我积极使用DBD::mysql,发现它是一个非常好的解决方案。我们在所有项目中也使用DBI模块。很多时候,我们为特定的应用程序在上面构建一个定制包,但在下面是核心DBI模块。通常直接使用DBI模块函数更容易。DBI是Perl和DBMS之间的“低级”接口。这几乎是唯一现实的选择。与Java中的JDBC相当。如果为Perl和数据库之间的低级接口选择DBI以外的任何东西,那将是疯

对于一般的数据库使用,Perl中使用的最好的数据库接口是什么?有更好的选择吗?

也来看看。

在我看来,DBI是一个非常好的选择。我积极使用DBD::mysql,发现它是一个非常好的解决方案。

我们在所有项目中也使用DBI模块。很多时候,我们为特定的应用程序在上面构建一个定制包,但在下面是核心DBI模块。通常直接使用DBI模块函数更容易。

DBI是Perl和DBMS之间的“低级”接口。这几乎是唯一现实的选择。与Java中的JDBC相当。如果为Perl和数据库之间的低级接口选择DBI以外的任何东西,那将是疯狂的(或者有一个非常特定的用例)

在DBI之上,还有各种对象/关系映射器,它们使使用数据库变得更加简单和干净

一些常见的/更流行的是


如果您只是在寻找低级数据库访问,您可以向它提供任何SQL字符串(可选地带有占位符和绑定值),它运行您的查询并返回结果,那么“是”是您目前为止的最佳选择


如果您想要一个更高级别的接口(即,在代码中几乎不需要或根本不需要使用原始SQL的接口),那么有几种可用于Perl的ORMs()。有关更多信息和链接,请查看Perl基金会的Perl 5 wiki页面。(如果您想在其中选择帮助或有具体问题,可以缩小此问题的范围,或者发布另一个问题。)

DBI很棒,但DBD模块的质量可能会有所不同。我被DBD:pg的一个版本中的一个“特性”所困扰。它喜欢将结果的完整数据加载到内存中,而不是与游标交互


按照常规-警告程序MOR.

如果您想使用对象(使用内省!),请看一看基于Moose实现ORM的Fey::ORM。它还有非常类似SQL的语法,因此它比其他一些ORM框架更适合我基于RDBMS的大脑。

DBI rocks!但是对于一个合适的、功能齐全的、快速的ORM,请始终使用DBIx::Class。

如果您选择将普通的
DBI
用于不需要ORM的任务,则 强烈建议你去看看

它不是替代品,而是在
DBI
这使得简单的事情变得简单,复杂的事情变得可能 失去
DBI
的任何灵活性

您是否发现必须在
DBI
文档,例如以arrayref(行)的形式获取查询结果 散列的数目(列及其值)? 使用
DBIx::Simple
这很简单:

# 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!
更多信息,请查看。此外,与的集成使简单查询变得轻而易举。它在我的所有代码中使用它,而我以前可能会使用
DBI
,并且
我不会回头看。

值得指出的是,绝大多数“高级”接口(如SQL::Abstract)和(DBIx::Simple)在实际执行查询时都使用DBI本身。DBI在Perl中几乎是公认的数据库连接标准方法。

基本上,首先应该习惯于只使用DBI。

DBIx::Simple允许通过名称更清晰地访问结果,而不是DBI或数组索引使用的奇怪的哈希方法(如果表的格式发生变化,它可以移动).这是如何回答这个问题的?