使用 Clojure 访问数据库

Accessing a database with Clojure

这是一个关于 Clojure 和从数据库访问信息的简单问题。

下面的代码,在我的一个函数中是有效的:

(defn insertNewValue []
(let [newRank
        (reduce + 1
          (map :max
            (db/query (env :database-url) ["select max(rank) from My_Table"])))
      .........

但是当数据库查询结果只有一条记录时使用reduce对我来说似乎不太合适。 所以这是我尝试的替代品:

(defn insertNewValue []
(let [dbRecord (db/query (env :database-url) ["select max(rank) from My_Table"])
      newRank (+ 1 (:max dbRecord))
      .........

这看起来干净多了,但它不起作用!

谁能告诉我我做错了什么?

dbRecord 似乎会 return 一个列表(这就是为什么您可以 map 覆盖它),但是,在您的第二次尝试中,您直接将其视为地图。由于保证你只有一条记录(你正在查询最大值),也许你需要做

(inc (:max (first dbRecord)))