主要關注訪問pg。不關心其餘dbhtml
[org.clojure/java.jdbc "0.7.9"] [org.postgresql/postgresql "42.2.5"]
問題是,每次查詢都要單獨鏈接一次db, 原生只支持3種複用方式:java
Using
with-db-connection
gitUsing
with-db-transaction
githubUsing Connection Pooling(第三方)web
沒有一般的connection cursor 機制,不知道怎麼想的……sql
懶得搭理,不貼代碼了。docker
:dependences數據庫
[funcool/clojure.jdbc "0.9.0"]
使用時後端
(require '[jdbc.core :as jdbc])
https://funcool.github.io/clojure.jdbc/latest/#introductionapp
這個中規中矩的。有一般的connection cursor ,可是鏈接db時用的db-spec的定義和前面那個不同,另搞了一套,也沒什麼可說的。平淡無奇,感受就是py裏的psycopg2
這個更相似SQLalchmey,訪問哪一個table前,還要聲明一下table格式,瘋了! 就是爲了擺脫這種OO風格才投奔lisp的啊啊啊!
https://github.com/remodoy/clj-postgresql
這個由於專門針對pg,因此優勢不少:
1 支持用環境變量PGHOST, PGPORT, PGUSER PGDATABASE隱式定義鏈接 免去db-spec這種硬編碼,不但節省代碼行數,也對運行在docker容器裏的應用特別方便。docker-compose裏設置就行了。
2 在兼容clojure.java.jdbc的query語句前提下,簡潔實現了相似cursor的connection pool pg/pool,能夠直接
(j/query @db ["select * from schema.table"])2 竟然支持postgis的類型!
這纔是真正節約廢話套話,專一表達的庫
那麼就用它了!
[clj-postgresql "0.7.0"]
這個庫發佈好幾年了,算上個人一票,在github只有區區91顆星而已。和PY動輒上千相比,用Clojure的人真的不多啊
每一個庫爲了不直接寫SQL,都搞一套微型、閹割版的DSL,我實在不喜歡這樣。
其實SQL自己表達能力已經很是好了,鏈接數據庫也是個標準問題,爲何寧肯本身發明DSL小方言,不去學SQL大外語。 不可理解。
SQL的背後是集合、數論,一階謂詞邏輯;
而LISP的背後是lambda演算。
其實正好優點互補:
SQL存儲狀態,或者說事實的集合,解決基於集合的計算與查詢, 特別煩的複雜查詢直接交給lisp就行了;
而LISP抽象動詞,最簡潔地表達AST,最適合表達複製的分支流程。
——後端這2個元老一結合,優點互補以後,就沒OO這個半吊子什麼事啦!
其實OO做爲基本類型str等等,或者做爲GUI web component 或者u3d裏的GameObject 都是很好的
可是類是很是少的。
類是基礎設施,是有豐富app開發經驗的framework做者給app開發新手提供的基礎設施的抽象.
絕大多數單例類均可以不存在。程序也不該該從class寫起.