16

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

4

11 回答 11

29

如果你只是在寻找低级数据库访问——你给它提供任何 SQL 字符串(可选地带有占位符和绑定值),它会运行你的查询并给你返回结果——那么是的,DBI是你最好的选择,到目前为止。

如果您想要一个更高级别的接口(即,在您的代码中需要很少或不需要使用原始 SQL 的接口),那么 Perl 有几个可用的 ORM(对象关系映射器)。查看Perl Foundation 的 Perl 5 wiki 上的ORM页面以获取更多信息和链接。(如果您需要帮助在其中进行选择或有具体问题,您可以缩小此问题的重点或发布另一个问题。)

于 2008-09-04T02:06:00.460 回答
18

DBI 是 Perl 和 DBMS 之间的“低级”接口。这几乎是这样做的唯一现实选择。类似于 Java 中的 JDBC。如果你为 Perl 和数据库之间的低级接口选择 DBI 以外的任何东西,你会很疯狂(或者有一个非常具体的用例)。

在 DBI 之上,还有各种对象/关系映射器,它们使使用数据库变得更加容易和清洁。

一些常见/更流行的是

于 2008-09-04T01:58:26.843 回答
10

如果您选择将 plainDBI用于不需要 ORM 的任务,我强烈建议您查看DBIx::Simple

它不是替代品,而是在此基础上设计得非常好的 APIDBI 使简单的事情变得简单而复杂的事情成为可能,而不会失去DBI.

您是否发现您必须在文档中查找看似简单的DBI 内容,例如将查询结果作为哈希(列及其值)的数组引用(行)?这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过的所有代码中都使用了它,而且我不会回头。

于 2008-09-16T13:53:06.243 回答
4

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

于 2008-09-16T14:02:40.573 回答
3

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

于 2008-09-12T16:07:06.500 回答
1

看看Class::DBI以及。

于 2008-09-03T23:08:44.990 回答
1

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

于 2008-09-03T23:08:57.563 回答
1

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

于 2008-09-03T23:40:43.120 回答
1

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

像往常一样 - 警告程序员。

于 2008-09-07T22:45:20.360 回答
1

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

于 2008-09-16T09:16:55.673 回答
0

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

于 2017-10-30T12:47:07.293 回答