Compojure TODO アプリを作成しており、MySQL をプライマリ データ ストアとして使用しています。次のように、clojure.contrib.sql を使用して MySQL とやり取りしています。
(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname "//localhost:3306/todo"
:user "<user>"
:password ""})
私が使用しているクエリは機能しているように見えますが、結果はキャッシュされているようです。たとえば、実行した後
(with-connection db
(insert-values :todos
[:name] [name]))
値はデータベースに正常に挿入されます。でも、
(defn sql-query [query]
(with-connection db
(with-query-results rows [query]
(into [] rows))))
挿入されるアイテムの数に関係なく、同じ値を返します。もちろん、Web アプリを再起動すると、結果は更新されますが、これは本番環境にあまり適していないようです :)。
なぜこれが起こっているのでしょうか?前もって感謝します。
リクエストに応じて、SELECT クエリの最上位フォームを次に示します。
(def home-view
(render
(base {:title "Clojure Todo"
:content (apply str
(map #(% :name)
(sql-query "select * from todos")))})))