Мои главные причины при переходе на стек DBI
- это гибкость и более широкая совокупность тестеров/отладчиков. С помощью DBI
вы позволяете себе использовать драйвер, специально настроенный для вашего конкретного механизма базы данных. Да, большинство баз данных также предлагают драйвер ODBC, но некоторые специфические возможности могут быть недоступны или более сложны через этот конкретный API. Кроме того, DBI
является независимой от платформы, что делает возможным последующий перенос в другую ОС, что значительно меньше проблем. Наконец, население людей, использующих DBI
для доступа к базе данных , далеко превышает число, использующее Win32::ODBC
, что означает, что ошибки могут быть найдены & исправлены быстрее.
Рассматривая другой связанный вопрос, я замечаю, что вы используете Oracle. Используя DBI
, у вас будет выбор между использованием DBD::ODBC
или DBD::Oracle
под капотом. Вы можете сделать этот выбор простым изменением на один из параметров метода DBI->connect
.
Если вы используете Instant Client от Oracle, то с помощью DBD::Oracle
вы можете избавиться от проблем с загрузкой/установкой компонента ODBC на компьютерах, которым необходим доступ только через Perl. Конечно, удаление слоя ODBC из уравнения может также иметь преимущества.
Update: Win32 :: ODBC является относительно непосредственное преобразование ODBC Middleware API от C до Perl. Если вы хотите ограничить себя подключениями ODBC в Windows, это имеет относительно небольшое преимущество, заключающееся в том, что вы получаете более прямой контроль над уровнем промежуточного ПО ODBC, который контролирует вашу базовую базу данных. Это, конечно, не означает, что API ODBC особенно верен API и/или возможностям базовой базы данных.
Опять же, предполагая, что вы используете Oracle, вы, кажется, есть 3 варианта:
Win32::ODBC
-> ODBC -> Драйвер Oracle для ODBC ~> Клиентский Oracle -> Сервер Oracle
DBI
- >DBD::Oracle
~> Клиент Oracle -> Сервер Oracle
DBI
->DBD::ODBC
~> ODBC -> Драйвер Oracle для ODBC ~> Клиентский Oracle -> Сервер Oracle
Где «~>» находится справа от слоя, который должен «подгонять» один API для соответствия другому.
Теперь я могу понять, если вы найдете верность API для промежуточного ПО ODBC. Лично я предпочел бы гибкость DBI
& более короткий стек программного обеспечения, используемый DBD::Oracle
. Хотя я также думаю, что более длинный стек с участием DBD::ODBC
будет отвечать 99 +% всех потребностей, даже с двумя слоями прокладок.
Еще одно различие между DBI
& Win32::ODBC
является то, что есть много модулей, построенных вокруг DBI
стека. От этого зависит полное пространство имен DBIx
. Найдите каждый из этих модулей на metacpan.org и нажмите ссылку «обратные зависимости» на своей странице, и вы получите довольно резкое изображение относительной ценности, которую сообщество Perl назначило каждому.
Так что, если вы хотите получить дополнительную, чисто эгоистичную причину: разработчик Perl с опытом работы с DBI также окажется в намного больше. Шутки в сторону.
см. Мой отредактированный вопрос. Кроме того, где вы размещаете Win32 и DBI. Является ли Win32 :: ODBC другим модулем доступа к базе данных? Чем он отличается от DBI? –
Громкий и ясный. @tjd Спасибо за ваши проницательные комментарии. –