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

时间:2020-03-05 18:47:21  来源:igfitidea点击:

CPAN DBI是在Perl中用于常规数据库使用的最佳数据库接口吗?有更好的选择吗?

解决方案

回答

也看看Class :: DBI。

回答

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

回答

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

回答

DBI是Perl和DBMS之间的"低级"接口。这几乎是唯一可行的选择。与Java中的JDBC相当。对于Perl和数据库之间的低级接口,我们可能会疯狂(或者有一个非常特殊的用例)选择DBI以外的任何东西。

在DBI之上,有各种对象/关系映射器,它们使数据库的使用变得更加轻松和整洁。

一些常见/比较流行的是

  • DBIx :: Class
  • 类别:: DBI
  • 玫瑰:: DB :: Object

回答

如果我们只是在寻找低级数据库访问权限,则可以向其提供任何SQL字符串(可选地使用占位符和绑定值),然后它会运行查询并返回结果,那么,到目前为止,DBI是我们最好的选择。

如果我们需要一个更高级别的接口(即,在代码中需要很少或者不需要使用原始SQL的接口),则Perl可以使用多个ORM(对象关系映射器)。在Perl Foundation的Perl 5 Wiki上查看ORM页面,以获取更多信息和链接。 (如果我们需要帮助来选择它们或者有特定的问题,则可以缩小此问题的重点,也可以发布另一个问题。)

回答

DBI很棒,但是DBD模块的质量可能会有所不同。我在DBD:pg的一个版本中被"功能"所困扰。它喜欢将结果的全部数据加载到内存中,而不是使用游标在其上进行插入。

按照通常的警告说明。

回答

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

回答

DBI摇滚!但是对于快速的适当的,功能齐全的ORM,请始终使用DBIx :: Class。

回答

如果我们选择对不需要ORM的任务使用普通的DBI
强烈建议我们看一下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!

请看更多示例。而且,与SQL :: Abstract的集成使简单查询变得轻而易举。它在我以前使用过DBI的所有代码中都使用了它,并且
我没有回头。

回答

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