Haskell有ORM工具吗?

57hvy0tb  于 11个月前  发布在  其他
关注(0)|答案(7)|浏览(97)

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

**编辑:**我想自由地选择从PostgreSQL MySQL和SQLite至于实际的数据库去。

uujelgoq

uujelgoq1#

我心目中的库不是一个ORM,但它仍然可以做你想要的。
如果你想让你的数据库访问安全,同时把东西很好地集成到你的程序中,那么试试HaskellDB。它基本上看你的模式,生成一些数据结构,然后给你类型安全的方式来查询。它已经存在了相当长的一段时间,社区的意见是,它是好的和稳定的。
要使用它,你需要一些底层的Haskell DB库,比如HSQL。
祝你好运!

b1payxdu

b1payxdu2#

ORM库存在的原因是C#或Java中的对象与您存储在数据库中的对象之间存在相对较大的差异。这在Haskell中不是一个问题,因为:
1.它没有对象
1.数据库和Haskell列表都有它们在数学集合论中的灵感,所以它们之间的摩擦比数据库和对象之间的摩擦要小得多。

biswetbf

biswetbf3#

Persistent非常好用,它允许你依靠类型推断来确定查询所涉及的表。例如,如果我在“models”文件中有以下内容:

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text

字符串
然后我可以这样做:

Just (Entity uid _)          <- selectFirst [ UserName ==. "exampleUser" ] []
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] []


它会知道我指的是哪些表,当然,你可能不想写这样的部分代码,但我想强调的只是查询。

fnx2tebb

fnx2tebb4#

我个人只用了“真实的世界Haskell”推荐的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)是这个领域最有前途的库。这两个库都支持你提到的数据库; Groundhog在这篇文章中没有写,但你可以看到它支持你感兴趣的数据库。
还要注意this thread on Haskell-beginners,其中提到Esqueletto是更新操作的更好选择。
请注意,Persistent与Yesod一起发布,因此可能会有更多的追随者。

envsm3lx

envsm3lx5#

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

5ktev3wc

5ktev3wc6#

您是否浏览过http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Database上的数据库Map和访问包
我还没有使用过它们,所以不能推荐任何一个特定的。我也不知道你打算使用什么数据库。

nr7wwzry

nr7wwzry7#

由于最后一个答案是10岁,让我添加一个新的工具,应该适合您的法案:
https://haskell-beam.github.io/beam/
它支持Postgres,Mysql,SQLite。TemplateHaskell不是必需的。所有查询都是用DSL编写的,如果它们编译,它们将是有效的SQL。

相关问题