DBIx :: Class获取dbh

src*_*ulo 5 database perl catalyst dbix-class

我在我正在构建的Catalyst应用程序中使用DBIx :: Class.它工作得很好,但有时我需要使用我自己开发的自己的db函数,这些函数非常符合我的需求.因此,我需要一个dbh.但是,因为我已经在使用,所以我知道它已经有一个正在使用的dbh.为了避免与数据库建立另一个不必要的连接,我想只使用已经创建的dbh .我知道DBIx ::类::存储:: DBI模块有两个方法和,但我真的不知道有什么区别两者之间,如果他们获得访问胸径的最佳途径.谁能告诉我什么是最好的方式来获得胸径会在一个应用程序?我更喜欢一种方法,我可以将其存储在存储区中,如下所示:DBIx::ClassDBIx::Classdbhdbh_doDBIx::ClassCatalyst

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

谢谢!

fri*_*edo 12

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

my $dbh = $c->model( 'My::DB' )->storage->dbh;
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • @srchulo是的,你在`dbh_do`下运行的任何东西都将受DBIx :: Class连接管理(如果数据库连接丢失则重新连接).对于非常好的事务管理,还有`txn_do`. (3认同)