13

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

这是一个简单的例子,取自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

该示例显示了如果名为equalsarticles的 HTTP 请求查询参数,如何将 WHERE 子句附加到表上的基础 SQL 查询。hidden1

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

任何人都可以建议一种使用 Haskell 数据库库之一来模拟 ActiveRecord 的动态查询构建工具的好方法吗?

如果 HDBC 是要走的路,我可以接受。但一个插图将不胜感激。

我想我正在寻找的是针对 PostgreSQL 后端动态组合查询的能力。

4

2 回答 2

7

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

以下是对每个权衡的一个很好的讨论: http ://blog.felipe.lessa.nom.br/?p=68

于 2012-10-22T23:40:34.163 回答
4

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

于 2012-10-22T22:23:36.273 回答