簡體   English   中英

我應該使用哪個Perl數據庫接口?

[英]Which Perl database interface should I use?

CPAN DBI是Perl中用於一般數據庫使用的最佳數據庫接口嗎? 有更好的選擇嗎?

如果你只是在尋找低級數據庫訪問 - 你可以提供任何SQL字符串(可選擇使用占位符和綁定值)並運行查詢並返回結果 - 然后是, DBI是你最好的選擇,到目前為止。

如果你想要一個更高級別的接口(即在你的代碼中很少或不需要使用原始SQL的接口),那么Perl可以使用幾個ORM( 對象關系映射器 )。 有關更多信息和鏈接,請查看Perl Foundation的Perl 5 wiki上的ORM頁面。 (如果您需要幫助選擇其中或有特定問題,您可以縮小此問題的重點或者可能發布另一個問題。)

DBI是Perl和DBMS之間的“低級”接口。 這幾乎是唯一可行的選擇。 與Java中的JDBC相當。 對於Perl和數據庫之間的低級接口,你會瘋狂(或者有一個非常具體的用例)來選擇除DBI以外的任何東西。

在DBI之上,有各種對象/關系映射器,這使得使用數據庫變得更加容易和清晰。

一些常見的/更受歡迎的是

如果您選擇將純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!

再看看這些例子 此外,與SQL :: Abstract的集成使得簡單的查詢變得輕而易舉。 它在我之前使用過DBI所有代碼中都使用它,我不會回頭看。

值得指出的是,絕大多數“高級”接口(如SQL :: Abstract)和(DBIx :: Simple)在實際執行查詢時都使用DBI本身。 DBI幾乎是Perl中數據庫連接的公認標准方法。

如果你想使用對象(有內省!),請看看基於Moose實現ORM的Fey :: ORM。 它也具有非常類似SQL的語法,因此它比其他一些ORM框架更適合我的基於RDBMS的大腦。

看看Class :: DBI也是如此。

在我看來,DBI是一個非常好的選擇。 我積極地使用了DBD :: mysql,發現它是一個非常好的解決方案。

我們在所有項目中也使用DBI模塊。 很多時候,我們為特定的應用程序在它上面構建一個自定義包,但在其下面是核心DBI模塊。 通常,直接使用DBI模塊功能會更容易。

DBI很棒,但DBD模塊的質量可能會有所不同。 我被其中一個版本的DBD中的'功能'咬了一口:pg。 它喜歡將結果的完整數據加載到內存中,而不是使用游標進行交互。

按照慣例 - Caveat programmor。

DBI搖滾! 但是對於一個適當的全功能ORM來說,DBIx :: Class一直很快。

基本上你應該習慣只使用DBI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM