Perl class::dbi - 多个连接

Perl class::dbi - multiple connections

我有一个 class 库是我在过去几年开发的,它使用 Perl 的 Class::DBI 来包装关系数据库(Prestashop 的数据库方案,不重要)

有人知道在单个 perl 脚本中创建多个 "instances" 这个 class,指向不同的数据库吗?例如。现在我做类似的事情:

use MyClassLib;
MyClassLib->connection('dbi:mysql:mydatabase', 'username', 'password');
MyClassLib->some_method()

一切正常。

我想做的基本上是别名 MyClassLib 以便能够使用它的另一个 "instance" 指向不同的数据库。这很痛苦,因为 Class::DBI 将其数据库连接存储为静态。

类似这样的伪代码

use MyClassLib;
use MyClassLib as MyClassLibAlias;
MyClassLib->connection('dbi:mysql:mydatabase', 'username', 'password');
MyClassLibAlias->connection('dbi:mysql:mynewdatabase', 'username', 'password');
MyClassLib->some_method()

然后从代码访问MyClassLibMyClassLibAlias。我知道 Class::DBI 是遗留问题,如果 Class::DBI

不存在,使用 DBIx::Class 的解决方案也将受到赞赏

谢谢

Class::DBI docs 告诉您提供自己的 db_Main() 方法来代替使用 connection()。我相信这可以 return 一个标准的 DBI 句柄,但是 Class::DBI 在内部使用 Ima::DBI。您可以为此使用单个 class,但要反映您的伪代码:

package MyClassLibAlias;
use base qw(MyClassLib);

sub db_Main {
    my $self = shift;        
    my ($dsn, $username, $password) = ...;
    return Ima::DBI->connect_cached($dsn, $username, $password);
}

您可能希望使用 class 属性引用 dsn、用户名和密码。