Является CPAN DBI лучшим интерфейсом базы данных для использования в Perl для общего использования базы данных? Есть ли лучшие варианты?
Какой интерфейс базы данных Perl я должен использовать?
Ответ 1
Если вы просто ищете доступ к низкоуровневому доступу к базе данных, вы кормите его любой строкой SQL (необязательно с владельцами мест и значениями привязки), и она запускает ваш запрос и возвращает результаты &mdash, а затем да, DBI - ваш лучший выбор, безусловно.
Если вам нужен интерфейс более высокого уровня (т.е. тот, который требует мало или вообще не использует необработанный SQL в вашем коде), тогда существует несколько ORM (объектно-реляционные карты), доступные для Perl. Ознакомьтесь с ORM на странице Perl Foundation Perl 5 для получения дополнительной информации и ссылок. (Если вы хотите помочь выбрать один из них или задать конкретные вопросы, вы можете ограничить внимание этого вопроса или, возможно, опубликовать другое.)
Ответ 2
DBI - это "низкий уровень" интерфейса между Perl и СУБД. Это в значительной степени единственный реалистичный выбор для этого. Сравнение с JDBC в Java. Вы были бы сумасшедшими (или имели бы очень конкретный вариант использования), чтобы выбрать что-нибудь иное, кроме DBI, для вашего интерфейса низкого уровня между Perl и базой данных.
В дополнение к DBI существуют различные объектно-реляционные сопоставители, которые упрощают работу и работу с базой данных.
Некоторые из распространенных/более популярных -
Ответ 3
Если вы решили использовать plain 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!
Взгляните на examples для получения дополнительной информации. Кроме того, интеграция с SQL::Abstract упрощает простые запросы. Он использует его во всем моем коде, где раньше я бы использовал DBI
, и
Я не оглядываюсь назад.
Ответ 4
Стоит отметить, что подавляющее большинство интерфейсов "более высокого уровня" (например, SQL:: Abstract) и (DBIx:: Simple) используют сам DBI при выполнении запросов. DBI в значительной степени является общепринятым стандартным методом подключения к базе данных в Perl.
Ответ 5
Если вы хотите работать с объектами (с интроспекцией!), взгляните на Fey:: ORM, который реализует ORM на основе Moose. Он также имеет синтаксис SQL как синтаксис, поэтому он подходит для моего мозга на основе RDBMS немного лучше, чем некоторые другие структуры ORM.
Ответ 6
Посмотрите Class:: DBI.
Ответ 7
По моему мнению, DBI - действительно хороший выбор. Я активно использовал DBD:: mysql и нашел, что это действительно хорошее решение.
Ответ 8
Мы используем модуль DBI во всех наших проектах. Много раз мы создаем собственный пакет поверх него для конкретного приложения, но под ним находится основной модуль DBI. И часто просто проще использовать функции модуля DBI.
Ответ 9
DBI отлично, но качество модулей DBD может меняться. Я был укушен "функцией" в одной из версий DBD: pg. Он любил загружать полные данные вашего результата в память, а не взаимодействовать с ним с помощью курсоров.
Как обычно - программист Caveat.
Ответ 10
Скалы DBI! но для полноценной полнофункциональной ORM, которая быстро переходит в DBIx:: Class все время.
Ответ 11
В принципе, вы должны сначала использовать только DBI.