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

有没有人知道在单个 perl 脚本中创建此类的多个“实例”,指向不同的数据库?例如。现在我做这样的事情:

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

所有这些都很好用。

我想要做的本质上是别名 MyClassLib 以便能够使用它的另一个“实例”指向不同的数据库。这是一种痛苦,因为 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 是遗留的,如果 DBIx::Class 不存在,使用 Class::DBI 的解决方案也将受到赞赏

谢谢

最佳答案

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

package MyClassLibAlias;
use base qw(MyClassLib);

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

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

关于Perl 类::dbi - 多个连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29079044/

10-13 06:11