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

时间:2008-09-03 22:53:43

标签: perl dbi cpan

CPAN DBI是Perl中用于一般数据库使用的最佳数据库接口吗?还有更好的选择吗?

11 个答案:

答案 0 :(得分:29)

如果您只是在寻找低级数据库访问 - 您可以为其提供任何SQL字符串(可选择使用占位符和绑定值)并运行您的查询并返回结果 - 然后是,{{3到目前为止,这是你最好的选择。

如果你想要一个更高级别的接口(即在你的代码中很少或根本不需要使用原始SQL的接口),那么Perl可以使用几个ORM(DBI)。有关更多信息和链接,请查看Perl Foundation的Perl 5 wiki上的object-relational mappers页面。 (如果你想帮助他们选择或有特定的问题,你可以缩小这个问题的重点或者发布另一个问题。)

答案 1 :(得分:18)

DBI是Perl和DBMS之间的“低级”接口。这几乎是唯一可行的选择。与Java中的JDBC相当。你会疯狂(或者有一个非常具体的用例)来为你在Perl和数据库之间的低级接口选择除DBI以外的任何东西。

在DBI之上,有各种对象/关系映射器,可以更轻松,更清晰地使用数据库。

一些常见的/更受欢迎的

答案 2 :(得分:10)

如果您选择使用普通DBI来执行不需要ORM的任务,我 强烈建议你看一下DBIx::Simple

它不是替代品,而是DBI之上设计精良的API 这使简单的事情变得简单而复杂,没有 失去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!

请查看examples了解更多信息。此外,与SQL::Abstract的集成使简单查询变得轻而易举。它在我之前使用DBI的所有代码中使用它,和 我不回头。

答案 3 :(得分:4)

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

答案 4 :(得分:3)

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

答案 5 :(得分:1)

同时查看Class::DBI

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

DBI很棒,但DBD模块的质量可能会有所不同。我被其中一个版本的DBD中的'功能'咬了一口:pg。它喜欢将结果的完整数据加载到内存中,而不是用游标进行交互。

按照惯例 - 警告计划。

答案 9 :(得分:1)

DBI摇滚!但是对于一个适当的全功能ORM来说,DBIx :: Class一直很快。

答案 10 :(得分:0)

基本上你应该习惯只使用DBI。