Haskell有任何ORM工具吗?

时间:2008-09-19 19:50:13

标签: database orm haskell

使用Haskell与数据库交互的最佳方式是什么?我习惯使用某种ORM(Django的ORM,hibernate等),在使用HAppS创建应用程序时,类似的东西会很好。

编辑:我希望可以自由选择Postgresql MySql和SQLite,就实际数据库而言。

6 个答案:

答案 0 :(得分:14)

我想到的图书馆不是ORM,但它仍然可以做你想要的。

如果你想要的东西可以让你的数据库访问安全,同时很好地将东西集成到你的程序中,那么试试HaskellDB。它基本上会查看您的架构,生成一些数据结构,然后为您提供类型安全的查询方式。它已经存在了很长一段时间,社区的意见是它很好而且稳定。

要使用它,您需要一些基础Haskell DB库,如HSQL。

祝你好运!

答案 1 :(得分:11)

存在ORM库的原因是C#或Java中的对象与存储在数据库中的对象之间存在相对较大的差异。这在Haskell中并不是一个问题,因为:

  1. 它没有对象
  2. 数据库和Haskell列表都有它们在数学集理论中的灵感,因此它们之间的摩擦力远远小于数据库和对象之间的摩擦力。

答案 2 :(得分:8)

持久性使用起来相当不错,并允许您依赖类型推断来确定查询所涉及的表。例如,如果我的“模型”文件中包含以下内容:

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 :(得分:3)

我个人只使用了{&#34; Real World Haskell&#34;所推荐的Database.HDBChttp://book.realworldhaskell.org/read/using-databases.html

但我同意使用更高级别的数据库访问层肯定是有意义的,我可能会尝试转移到这样的模型以用于未来的项目。在这个主题上,我发现了2012年的这篇文章,它提供了Haskell的这些解决方案的历史和比较: http://www.yesodweb.com/blog/2012/03/history-of-persistence

通过它,我认为Persistent(documentation)和Groundhog(some documentationexamples)是这个领域最有前途的图书馆。两个库都支持您提到的数据库;对于土拨鼠来说,这篇文章没有写,但in this announcement你可以看到它完全支持你感兴趣的数据库。

另请注意this thread on Haskell-beginners,其中Esqueletto被视为更新操作的更佳选择。

请注意,使用Yesod的Persistent船舶可能会有更多的追随者。

答案 4 :(得分:2)

我实际上非常喜欢HAppS(HAppS-State)的方法,它允许你忘记浏览ORM的编组/解组编码,让你只使用Haskell的数据类型。

答案 5 :(得分:1)

您是否查看了数据库映射并访问了包 http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database

我没有使用它们,所以不能推荐任何特定的。我也不知道您计划使用哪些数据库。