#sql #clojure
#sql #clojure
Вопрос:
Например, в этом запросе:
(Clojure.contrib.sql/with-query-results rows ["SELECT count(*) from tableName"] (doseq [record rows] (println (vals record))))
Кажется, что запись и строки не существуют вне этой области, но я хочу, чтобы они существовали в любое время для моего доступа.
Обновление: я попробовал следующие строки кода
(def asdf [])
(sql/with-connection db
(sql/with-query-results rows ["SELECT * FROM tableName"] (doseq [record rows] (def asdf (conj asdf record)))))
(println asdf)
Почему оператор печати asdf выше возвращает пустой, когда я добавил к нему строки в инструкции sql?
Ответ №1:
Похоже, вам не хватает базового понимания основополагающих принципов Clojure, в частности неизменяемых структур данных. Ваш conj
вызов не изменяет var asdf
— var не является переменной. Вы могли бы сделать что-то вроде следующего (непроверенного)
(def asdf
(sql/with-connection db
(doall (sql/with-query-results rows ["SELECT * FROM tableName"]))))
сохранить результат непосредственно как значение asdf
, но это, вероятно, не совсем то, что вы хотите. Вместо этого ознакомьтесь с подходом Clojure к функциональному программированию.