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, имя пользователя и пароль, используя атрибуты класса.

Другие вопросы по тегам