2008-09-03 80 views

回答

29

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

如果你想要一个更高级别的接口(即在你的代码中很少或不需要使用原始SQL),那么有几个ORM(object-relational mappers)可用于Perl。查看Perl Foundation的Perl 5 wiki上的ORM页面以获取更多信息和链接。 (如果你想帮助选择其中或有具体问题,您可以缩小这个问题的重点或者是发布一个又一个。)

1

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

1

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

18

DBI是Perl和DBMS之间的“低级”接口。这几乎是唯一现实的选择。在Java中与JDBC相当。对于Perl和数据库之间的低级接口,你会疯狂(或者有一个非常特殊的用例)为DBI之外的其他任何东西选择它。

在DBI之上,有各种对象/关系映射器,它们使数据库的工作变得更加简单和清晰。

一些常见的/更流行的是

1

DBI是伟大的,但DBD模块的质量各不相同。在一个版本的DBD中,我被一个'功能'咬了:pg。它喜欢将你的结果的完整数据加载到内存中,而不是用游标对它进行交涉。

按照惯例 - 警戒程序。

3

如果你想与对象的工作(与内省!),看看精类:: ORM基于穆斯它实现ORM。它也有非常像SQL的语法,所以它适合我的基于RDBMS的大脑比其他一些ORM框架更好一些。

1

DBI岩石!但是对于一个适合全功能的ORM来说,这个ORM一直都是快速的DBIx :: Class。

10

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

这不是一个替代品,但对DBI ,让简单的事情简单的和复杂的事情成为可能,顶部设计得非常好API没有 丢失任何DBI的的flexibilty的。

你有没有发现,你不得不寻找看似简单的事情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! 

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

+0

DBIx ::简单的允许通过名称结果更清洁的访问,而不是由DBI或数组索引(如果你的表更改格式,它可以左右移动)所使用的奇怪的哈希方法。 – 2009-07-22 11:28:00

4

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

0

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

+0

这是如何回答这个问题的? – ImaginaryHuman072889 2017-10-30 13:09:21

相关问题