使用Haskell与数据库交互的最佳方式是什么?我习惯使用某种ORM(Django的ORM,hibernate等),当用 HAppS

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

有帮助吗?

解决方案

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

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

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

祝你好运!

其他提示

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

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

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

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

它会知道我的意思是哪些表。当然,您可能不希望编写这样的部分代码,但我想强调查询。

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

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

通过它,我收集了Persistent(文档)和Groundhog (一些文档示例)是该领域最有前途的图书馆。两个库都支持您提到的数据库;对于土拨鼠,它不是在这篇文章中写的,而是 in this公告您可以看到它完全支持您感兴趣的数据库。

另请注意 Haskell-beginners上的此主题,其中 Esqueletto 被认为是更好的选择用于更新操作。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top