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

StackOverflow https://stackoverflow.com/questions/104960

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Удачи вам!

Другие советы

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

  1. В нем нет Объектов
  2. И базы данных, и список Haskell черпают свое вдохновение в математической теории множеств, поэтому трений между ними намного меньше, чем между базами данных и объектами.

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 ] []

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

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

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

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

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

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

На самом деле мне очень нравится подход HAppS (Счастливое состояние) что позволяет вам забыть о прохождении маршалинга / демонтажа ORM и позволить вам просто использовать типы данных Haskell.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top