标签: clojureql

ORM for clojure?

我正在阅读这个关于clojure web堆栈的网站:

http://brehaut.net/blog/2011/ring_introduction

对于clojure,它有关于ORM的说法:

"出于显而易见的原因,Clojure没有SQL/Relational DB ORM."

我可以看到的显而易见的原因是,当您执行clojure.contrib.sql或clojureql查询时,将自动映射到对象.然而,似乎需要一些额外的工作来做一对多或多对多的关系(尽管可能没有太多的工作).

我发现这写了一对多:http://briancarper.net/blog/493/

我不确定我同意哪个; 它似乎假设从数据库中提取了两个表,然后在内存中过滤了连接表.在实践中我认为sql查询将指定where条件.

所以我想知道,是否有一些相当明显的方法可以通过clojureql或clojure.contrib.sql自动执行一对多关系?我唯一能想到的是这样的事情(使用典型的博客文章/评论示例):

(defn post [id] 
    @(-> (table :posts)
        (select (where :id id))))
(defn comments [post_id]
    @(-> (table :comments) 
         (select (where :post_id post_id))))
(defn post-and-comments [id]
    (assoc (post id) :comments (comments id)))
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以自动化这个概念,还是这样做得好?

clojure clojureql

38
推荐指数
4
解决办法
9723
查看次数

ClojureQL与clojure.contrib.sql相比如何?

看起来每个人都涵盖了基本情况,例如选择某些列并通过谓词过滤得很好,但我想知道每种情况如何比较更高级的情况.是否更容易在一个方面表达复杂的查询?一个库是否缺少对方涵盖的任何功能?

sql clojure clojure-contrib clojureql

25
推荐指数
1
解决办法
3375
查看次数

clojureql,open-global和with-results

只是想了解clojureql的开放全局和结果的目的.我首先阅读了这篇概述:ClojureQL与clojure.contrib.sql相比如何?

我认为由于某种原因open-global将取代sql/with-connection,例如我认为这样可行:

(def db {...}) ; connection details omitted
(open-global db) 

(println (:name (first @(table :users))) 
Run Code Online (Sandbox Code Playgroud)

但这不起作用.看来我需要做开放全局并将执行查询包装在(sql/with-connection数据库)中,这让我感到惊讶(我认为open-global提供了一个默认的全局可访问连接).所以,既然情况似乎并非如此,我现在就想知道它到底是做什么的.

另外......结果与简单地用@执行查询有什么不同?因为似乎@(table:users)会给我一个序列,这个序列是执行查询的结果(不是那个with-results也是如此)?

clojure clojureql

6
推荐指数
1
解决办法
313
查看次数

clojureql在两个日期之间选择

我如何使用clojureql在两个日期之间进行选择?希望这样的事情:

@(-> (table :abc)
     (select (where (between d1 d2))))
Run Code Online (Sandbox Code Playgroud)

clojure clojureql

5
推荐指数
2
解决办法
287
查看次数

标签 统计

clojure ×4

clojureql ×4

clojure-contrib ×1

sql ×1