Существуют ли какие-либо инструменты ORM для Haskell? - PullRequest
35 голосов
/ 19 сентября 2008

Каков наилучший способ взаимодействия с базой данных с использованием Haskell? Я привык использовать какой-то ORM (ORM Django, hibernate и т. Д.), И что-то подобное было бы неплохо при создании приложений с HAppS .

Редактировать: Я бы хотел свободно выбирать из Postgresql MySql и SQLite, насколько это возможно для реальных баз данных.

Ответы [ 6 ]

14 голосов
/ 20 сентября 2008

Библиотека, которую я имею в виду, не ORM, но она все равно может делать то, что вы хотите.

Если вы хотите что-то, что делает ваш доступ к базе данных безопасным, и в то же время хорошо интегрирует вещи в вашу программу, попробуйте HaskellDB . Он в основном смотрит на вашу схему, генерирует некоторые структуры данных, а затем дает вам безопасные способы запроса. Это было довольно давно, и общественное мнение таково, что это хорошо и стабильно.

Чтобы использовать его, вам понадобится некоторая базовая библиотека БД Haskell, например HSQL.

Удачи!

11 голосов
/ 16 ноября 2008

Причина существования библиотек ORM заключается в том, что между объектами в C # или Java и тем, что вы храните в базе данных, существует большая разница. Это не такая большая проблема в Haskell, потому что:

  1. У него нет объектов
  2. Обе базы данных и список Haskell вдохновляют математическую теорию множеств, поэтому трение между ними намного меньше, чем между базами данных и объектами.
8 голосов
/ 29 мая 2013

Persistent довольно удобен в использовании и позволяет вам полагаться на тип, чтобы определить таблицу, к которой относится ваш запрос. Например, если в моем файле "models" есть следующее:

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

Тогда я мог бы сделать это:

Just (Entity uid _)          <- selectFirst [ UserName ==. "Some User ] []
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] []

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

3 голосов
/ 28 мая 2013

Я лично использовал только Database.HDBC , который рекомендован "Real World Haskell": http://book.realworldhaskell.org/read/using-databases.html

Но я согласен, что определенно имеет смысл использовать более высокий уровень доступа к БД, и я, вероятно, постараюсь перейти к такой модели для будущих проектов. На эту тему я нашел этот пост с 2012 года, в котором приводится история и сравнение таких решений для Haskell: http://www.yesodweb.com/blog/2012/03/history-of-persistence

Из него я понял, что Persistent ( документация ) и Groundhog ( некоторая документация , examples ) являются наиболее многообещающими библиотеками в этой области. Обе библиотеки поддерживают упомянутые вами базы данных; для Groundhog это не написано в этом посте, но в этом объявлении вы можете видеть, что оно поддерживает именно те БД, которые вас интересуют.

Также обратите внимание на эту тему для начинающих на Haskell , в которой Esqueletto упоминается как лучший выбор для операций обновления.

Обратите внимание, что постоянные корабли с Йесодом и, следовательно, могут иметь большее число последователей.

2 голосов
/ 02 ноября 2008

Мне действительно очень нравится подход HAppS ( HAppS-State ), который позволяет вам забыть про прохождение маршаллингового / демаршаллирующего куска ORM и позволяет вам просто использовать типы данных Haskell.

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

Вы просматривали отображение базы данных и пакеты доступа на http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database

Я не использовал их, поэтому не могу рекомендовать какой-либо конкретный. Я также не знаю, какие базы данных вы планируете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...