2017-02-19 2 views
0

Вот простой вопрос о Clojure и доступе к информации из базы данных.Доступ к базе данных с Clojure

Следующий код внутри функции шахты работает:

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

Но использование уменьшить, когда есть только одна запись в результате запроса БД не кажется, очень подходит для меня. Так вот что я пытался в качестве замены:

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

, который кажется намного чище, но это не работает!

Может ли кто-нибудь сказать мне, что я делаю неправильно?

ответ

1

Похоже, что dbRecord вернет список (вот почему вы могли бы map над ним), однако во второй попытке вы рассматриваете его как карту напрямую. Поскольку гарантируется, что у вас есть только одна запись (вы запрашиваете максимальное значение), возможно, вам нужно сделать

(inc (:max (first dbRecord))) 
+0

Это кажется простым. Если это сработает, это будет хорошо. – Michel

+0

Да, это работает. Благодаря! – Michel