DBIx :: Class获取dbh

时间:2013-02-06 01:16:51

标签: database perl catalyst dbix-class

我在我正在构建的DBIx::Class应用中使用Catalyst。它工作得很好,但有时我需要使用我自己开发的自己的db函数,这些函数非常符合我的需求。因此,我需要一个dbh。但是,因为我已经在使用DBIx::Class,所以我知道它已经有一个正在使用的dbh。为了避免与数据库建立另一个不必要的连接,我想使用DBIx::Class已经创建的dbh。我知道DBIx::Class::Storage::DBI模块有两种方法dbhdbh_do,但我不确定两者之间有什么区别,如果它们是获取访问权限的最佳方式dbh。任何人都可以告诉我从DBIx::Class获取dbh的最佳方法是在Catalyst应用中吗?我更喜欢一种方法,我可以将其存储在存储区中,如下所示:

sub dbh :Private { 
    my ($self, $c) = @_;
    $c->stash->{dbh} = #get dbh from DBIx::Class here
}

谢谢!

2 个答案:

答案 0 :(得分:11)

我总是要看一下。假设您有一个架构对象的实例,您可以通过storage方法获取其Storage对象。假设它是Storage::DBI,那么有一个dbh方法可用于获取数据库句柄。所以:

my $dbh = $c->model( 'My::DB' )->storage->dbh;

应该这样做。

答案 1 :(得分:-2)

@srchulo答案很棒,dbh_do是内置异常处理的方法,但我建议将你的函数转换为不再使用dbh而只是使用DBIX :: Class。这样,下次你只需要改变一个地方而不是继续寻找遗留的dbh和raw sqls。希望它有意义。