我有一个我在过去几年开发的类库,它使用 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()
然后从代码访问
MyClassLib
和 MyClassLibAlias
。我知道 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/