我在使用DBIx::Class创建了一个Catalyst应用程序。它工作得很好,但有时我需要使用我自己开发的db函数,这些函数非常符合我的需求。正因为如此,我需要一个dbh。但是,因为我已经在使用DBIx::Class
我知道它已经有了一个dbh,它正在使用。为了避免与数据库建立另一个不必要的连接,我想只使用DBIx::Class
已经创建的dbh。我知道DBIx::Class::Storage::DBI模块有两种方法dbh
和dbh_do
,但我不确定两者之间有什么不同,以及它们是否是访问dbh的最佳方法。任何人都可以告诉我从DBIx::Class
获得dbh的最佳方式是在Catalyst
应用程序中吗?我更喜欢一种我可以转发的方法,将dbh存储在如下藏品中:DBIx :: Class获取dbh
sub dbh :Private {
my ($self, $c) = @_;
$c->stash->{dbh} = #get dbh from DBIx::Class here
}
谢谢!
是否有任何理由使用'dbh_do'来代替?因为'dbh'的文档说:'考虑使用“dbh_do”来代替.'。 – srchulo
我自己并没有使用它,但'dbh_do'的文档说这是使用一个新的异常系统。 (我想通过包装'$ dbh-> do'并执行提供的函数。)所以我想这就是为什么。不过,我从来没有遇到过使用原始'$ dbh'的任何问题。 – friedo
@srchulo是的,你在'dbh_do'下运行的任何东西都将受到DBIx :: Class连接管理(如果DB连接丢失,则重新连接)。对于非常好的交易管理还有'txn_do'。 – hobbs