3

我有一个过去几年开发的类库,它使用 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

谢谢

4

1 回答 1

3

Class::DBI 文档告诉您提供自己的方法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、用户名和密码。

于 2015-03-16T14:42:33.450 回答