Есть ли какие-нибудь инструменты ORM для Haskell?

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
37
0
12 130
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

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

rcreswick 20.09.2008 02:01
Ответ принят как подходящий

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

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

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

Удачи!

Документ HaskellDB: www.cs.chalmers.se/~bringert/publ/haskelldb/haskelldb-db-200‌ 5.pdf

rcreswick 20.09.2008 02:57

Проблема HaskellDB заключается в том, что в настоящее время он не собирается с последними версиями GHC (6.8 или 6.10).

Erik Hesselink 12.11.2008 02:29

@ErikHesselink HaskellDB (github) теперь поддерживает GHC 7.10.

Janus Troelsen 18.08.2016 12:07

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

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

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

Я использую SqlAlchemy в Python, потому что он упрощает сборку / повторное использование операторов SQL без непосредственного манипулирования строками. Есть ли что-то подобное для Haskell?

Paulo Scardine 06.08.2012 03:08

«Объект» в ORM не соответствует конкретно объектно-ориентированному программированию, а также применяется к значениям Haskell. и хотя сопротивление между реляционными и объектно-ориентированными моделями больше, чем у алгебраических моделей Haskell, все же существует некоторое трение (круговые или графовые типы могут быть естественно представлены в RDBMS, но не в Haskell), а также множество надоедливых шаблонов .

Ari Fordsham 22.02.2021 17:22

Лично я использовал только База данных.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 (некоторая документация, Примеры) являются наиболее многообещающими библиотеками в этой области. Обе библиотеки поддерживают упомянутые вами базы данных; для сурка это не написано в этом посте, но в этом объявлении вы можете видеть, что он поддерживает именно те БД, которые вас интересуют.

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

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

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

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

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

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

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

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