CPAN DBI是Perl中用于一般数据库使用的最佳数据库接口吗?还有更好的选择吗?
答案 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。