使用Haskell与数据库交互的最佳方式是什么?我习惯使用某种ORM(Django的ORM,hibernate等),在使用HAppS创建应用程序时,类似的东西会很好。
编辑:我希望可以自由选择Postgresql MySql和SQLite,就实际数据库而言。
答案 0 :(得分:14)
我想到的图书馆不是ORM,但它仍然可以做你想要的。
如果你想要的东西可以让你的数据库访问安全,同时很好地将东西集成到你的程序中,那么试试HaskellDB。它基本上会查看您的架构,生成一些数据结构,然后为您提供类型安全的查询方式。它已经存在了很长一段时间,社区的意见是它很好而且稳定。
要使用它,您需要一些基础Haskell DB库,如HSQL。
祝你好运!答案 1 :(得分:11)
存在ORM库的原因是C#或Java中的对象与存储在数据库中的对象之间存在相对较大的差异。这在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.HDBC: http://book.realworldhaskell.org/read/using-databases.html
但我同意使用更高级别的数据库访问层肯定是有意义的,我可能会尝试转移到这样的模型以用于未来的项目。在这个主题上,我发现了2012年的这篇文章,它提供了Haskell的这些解决方案的历史和比较: http://www.yesodweb.com/blog/2012/03/history-of-persistence
通过它,我认为Persistent(documentation)和Groundhog(some documentation,examples)是这个领域最有前途的图书馆。两个库都支持您提到的数据库;对于土拨鼠来说,这篇文章没有写,但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
我没有使用它们,所以不能推荐任何特定的。我也不知道您计划使用哪些数据库。