Haskell有ORM工具吗?

rcr*_*ick 35 database orm haskell

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

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

Jas*_*git 14

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

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

要使用它,您需要一些底层的Haskell DB库,如HSQL.

祝好运!


tom*_*jen 11

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

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

  • 我在Python中使用SqlAlchemy,因为它可以轻松地组装/重用SQL语句而无需直接操作字符串.Haskell有这样的东西吗? (20认同)

Joh*_*ley 8

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

User
    name Text
    age Int

Login
    user UserId
    login Text
    passwd Text
Run Code Online (Sandbox Code Playgroud)

然后我可以这样做:

Just (Entity uid _)          <- selectFirst [ UserName ==. "Some User ] []
Just (Entity lid Login {..}) <- selectFirst [ LoginUser ==. uid ] []
Run Code Online (Sandbox Code Playgroud)

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