Haskell是否有像ActiveRecord或Sequel这样的SQL查询编写库?

时间:2012-10-22 21:35:46

标签: haskell hdbc

使用Ruby的ActiveRecord或Sequel,您可以逐步构建SQL查询,根据运行时的条件向查询添加wherejoinorder子句。

以下是一个简单的示例,取自ASCIIcasts

def index  
  @articles = Article.order('name')  

  if params[:hidden]  
    @articles = @articles.where(:hidden =>(params[:hidden] == "1"))  
  end  

  respond_to do |format|  
    format.html # index.html.erb  
    format.xml  { render :xml => @articles }  
  end  
end

该示例显示如果名为articles的HTTP请求查询参数等于hidden,如何将WHERE子句附加到1表上的基础SQL查询。

我一直在Haskell中看HDBC和postgresql-simple。似乎postgresql-simple故意使得从动态连接的部分构建SQL查询变得困难,以防止SQL注入。 HDBC似乎足够灵活,可以根据运行时的条件构建不同结构的SQL查询,但它似乎没有提供ActiveRecord或Sequel提供的抽象级别。

有人能建议使用其中一个Haskell数据库模拟ActiveRecord的动态查询构建工具吗?

如果HDBC是要走的路,我很好。但是会有一个例子。

我想我正在寻找的是能够针对PostgreSQL后端动态编写查询。

2 个答案:

答案 0 :(得分:7)

你可能需要Persistent,你可能需要HaskellDB,你可能想要像Esqueleto这样的东西。

以下是对各方权衡的良好讨论: http://blog.felipe.lessa.nom.br/?p=68

答案 1 :(得分:4)

您可能会发现http://hackage.haskell.org/package/esqueleto对此应用程序感兴趣。