Какой интерфейс базы данных Perl мне следует использовать? - PullRequest
16 голосов
/ 04 сентября 2008

Является ли CPAN DBI лучшим интерфейсом базы данных для использования в Perl для общего использования базы данных? Есть ли лучшие варианты?

Ответы [ 11 ]

29 голосов
/ 04 сентября 2008

Если вы просто ищете низкоуровневый доступ к базе данных - вы вводите в нее любую строку SQL (необязательно с заполнителями и значениями связывания), и он выполняет ваш запрос и возвращает результаты & mdash; тогда да, DBI - ваша лучшая ставка на сегодняшний день.

Если вам нужен интерфейс более высокого уровня (т. Е. Тот, который практически не требует использования исходного кода SQL в вашем коде), то для Perl доступно несколько ORM ( объектно-реляционных преобразователей ). Посетите страницу ORM в Perl 5 вики Perl Foundation для получения дополнительной информации и ссылок. (Если вам нужна помощь в выборе среди них или у вас есть конкретные вопросы, вы можете сузить фокус этого вопроса или, возможно, опубликовать другой.)

18 голосов
/ 04 сентября 2008

DBI - это интерфейс низкого уровня между Perl и СУБД. Это практически единственный реалистичный выбор для этого. Сравнимо с JDBC в Java. Вы бы сошли с ума (или имели бы очень конкретный вариант использования), чтобы выбрать что-то кроме DBI для низкоуровневого интерфейса между Perl и базой данных.

Помимо DBI, существуют различные объектные / реляционные средства отображения, которые делают работу с базой данных намного проще и чище.

Некоторые из распространенных / более популярных

10 голосов
/ 16 сентября 2008

Если вы решили использовать обычный DBI для задачи, которая не требует ORM, я настоятельно рекомендуем вам взглянуть на DBIx :: Simple .

Это не замена, а очень хорошо разработанный API поверх DBI что делает простые вещи простыми и сложные вещи возможными, без потеря любой гибкости DBI.

Вы когда-нибудь находили, что вам приходилось искать простые вещи в DBI документация, например получение результатов запроса в виде arrayref (rows) хэшей (столбцы и их значения)? С DBIx::Simple это просто:

# DBI
my $rows = $dbh->selectall_arrayref($sql, { Slice => {} });
                 # tell it we want "hashes" (yuck!) ^^^^

# DBIx::Simple
my $rows = $db->query($sql)->hashes; # does the same as the above code underneath!

Взгляните на примеры , чтобы узнать больше. Кроме того, интеграция с SQL :: Abstract упрощает простые запросы. Он использует его во всем моем коде, где я бы использовал DBI раньше, и Я не оглядываюсь назад.

4 голосов
/ 16 сентября 2008

Стоит отметить, что подавляющее большинство «высокоуровневых» интерфейсов (таких как SQL :: Abstract) и (DBIx :: Simple) используют сам DBI при фактическом выполнении запросов. DBI в значительной степени является общепринятым стандартным методом для соединения с базой данных в Perl.

3 голосов
/ 12 сентября 2008

Если вы хотите работать с объектами (с самоанализом!), Взгляните на Fey :: ORM, который реализует ORM на основе Moose. Он также имеет синтаксис, очень похожий на SQL, поэтому он подходит для моего мозга, основанного на RDBMS, немного лучше, чем некоторые другие платформы ORM.

1 голос
/ 16 сентября 2008

DBI качается! но для правильной полнофункциональной ORM, которая быстро работает с DBIx :: Class все время.

1 голос
/ 08 сентября 2008

DBI великолепен, но качество модулей DBD может отличаться. Меня укусила «особенность» в одной из версий DBD: pg. Ему нравилось загружать полные данные вашего результата в память, а не обрабатывать их курсорами.

Как обычно - Caveat programmor.

1 голос
/ 04 сентября 2008

Мы также используем модуль DBI во всех наших проектах. Много раз мы создаем пользовательский пакет поверх него для конкретного приложения, но под ним находится основной модуль DBI. И часто просто проще использовать функции модуля DBI напрямую.

1 голос
/ 04 сентября 2008

На мой взгляд, DBI - действительно хороший выбор. Я активно использовал DBD :: mysql и нашел, что это действительно хорошее решение.

1 голос
/ 04 сентября 2008

Взгляните также на Class :: DBI .

...