database - DBIx::Class 获取 dbh

标签 database perl catalyst dbix-class

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

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

谢谢!

最佳答案

我总是要查这个。假设您有一个模式对象的实例,您可以通过 storage 方法获取它的 Storage 对象。假设这是一个 Storage::DBI , 然后有一个 dbh可用的方法将为您提供数据库句柄。所以:

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

应该可以解决问题。

关于database - DBIx::Class 获取 dbh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719977/

相关文章:

mysql - 如何在mySQL中选择等效但倒排的元组

数据库选择 : High-write, 低读

windows - 如何配置 Module::Build 以不将文件安装为只读?

perl - 为什么运行 Apache+FastCGI 的 Catalyst 应用程序不提供动态内容?

mysql - DBIC 加入 Catalyst Web 应用程序

database - jpa实体关系多对多自身关系

mysql - 更改整数列的默认值

perl - 在perl中四舍五入小数,结果错误

perl - Perl 中的 SSH 与 X11 转发

perl - 如何避免存储过多的 session ?