Perl class::dbi - несколько соединений
У меня есть библиотека классов, которую я разработал за последние несколько лет, которая использует Perl Class::DBI для обертывания реляционной базы данных (схема БД для Prestashop, не так уж важна)
Кто-нибудь знает в любом случае в одном скрипте 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
Спасибо
1 ответ
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, имя пользователя и пароль, используя атрибуты класса.