使用 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)))
这是一个关于 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)))