Haskell有没有ORM工具?

使用Haskell与数据库进行交互的最佳方式是什么? 我习惯于使用某种ORM(Django的ORM,hibernate等),而使用HAppS创build应用程序时,类似的东西也不错。

编辑:我想自由selectPostgresql MySql和SQLite尽可能实际的数据库去。

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

如果你想让你的数据库访问安全的东西,而很好地整合到你的程序,然后尝试HaskellDB 。 它基本上看你的模式,生成一些数据结构,然后给你键入安全的方式来查询。 它已经存在了一段时间,社区的观点是,它是好的,稳定的。

要使用它,你需要一些基础的Haskell数据库库,如HSQL。

祝你好运!

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

  1. 它没有对象
  2. 数据库和Haskell列表都有math集合理论的启发,所以它们之间的摩擦比数据库和对象之间的摩擦less得多。

持久性是相当不错的使用,并让你依靠types推断来确定你的查询相关的表。 例如,如果我在我的“模型”文件中有以下内容:

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

它会知道我的意思。 当然,你可能不想像这样写部分代码,但我只想强调查询。

我其实非常喜欢HAppS( HAppS-State )的方法,它允许你忘记通过ORM的编组/解组,让你简单地使用Haskell的数据types。

我个人只使用“Real World Haskell”推荐的Database.HDBC : http : //book.realworldhaskell.org/read/using-databases.html

但是我同意,使用更高级别的数据库访问层肯定是有意义的,我可能会尝试转向未来项目的这种模型。 关于这个话题,我从2012年发现了这个post,它提供了Haskell的这种解决scheme的历史和比较: http : //www.yesodweb.com/blog/2012/03/history-of-persistence

从这里我可以看到,持久性( 文档 )和土拨鼠( 一些文档 , 例子 )是这个领域最有前途的图书馆。 这两个库都支持你提到的数据库; 对于土拨鼠这不是写在这篇文章,但在这个公告中,你可以看到,它支持完全你感兴趣的数据库。

另外请注意这个线程在 Haskell- 初学者 ,其中Esqueletto被认为是一个更好的select更新操作。

请注意,持有Yesod的船舶可能会有更多的关注。

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

我没有使用它们,所以不能推荐任何特定的。 我也不知道你打算使用什么数据库。