2015-03-16 4 views
3

У меня есть библиотека классов, которую я разработал за последние несколько лет, которая использует Perl's Class :: DBI для переноса реляционной базы данных (схема DB для Prestashop, а не то, что имеет значение)Класс Perl :: dbi - множественные соединения

Кто-нибудь знает о любом сценарии 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

Благодарности

ответ

3

Class::DBIdocs сказать вам, чтобы предоставить свой собственный 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); 
} 

Вы, вероятно, хотите, чтобы ссылаться на имя источника данных, имя пользователя и пароль, используя атрибуты класса.

+0

Отлично, спасибо –

Смежные вопросы