Haskell有没有ORM工具?
使用Haskell与数据库进行交互的最佳方式是什么? 我习惯于使用某种ORM(Django的ORM,hibernate等),而使用HAppS创build应用程序时,类似的东西也不错。
编辑:我想自由selectPostgresql MySql和SQLite尽可能实际的数据库去。
我想到的图书馆不是一个ORM,但它可能仍然可以做你想要的。
如果你想让你的数据库访问安全的东西,而很好地整合到你的程序,然后尝试HaskellDB 。 它基本上看你的模式,生成一些数据结构,然后给你键入安全的方式来查询。 它已经存在了一段时间,社区的观点是,它是好的,稳定的。
要使用它,你需要一些基础的Haskell数据库库,如HSQL。
祝你好运!
ORM库存在的原因是C#或Java中的对象与您在数据库中存储的对象之间存在相对较大的差异。 这在Haskell中并不是一个问题,因为:
- 它没有对象
- 数据库和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中的数据库映射和访问包;
我没有使用它们,所以不能推荐任何特定的。 我也不知道你打算使用什么数据库。