主要关注访问pg。不关心其他db
1 clojure.java.jdbc
http://clojure-doc.org/articles/ecosystem/java_jdbc/reusing_connections.html 这个最广,需要配合不同DB[org.clojure/java.jdbc "0.7.9"] [org.postgresql/postgresql "42.2.5"]
问题是,每次查询都要单独连接一次db, 原生只支持3种复用方式:
Using
with-db-connection
Using
with-db-transaction
Using Connection Pooling(第三方)
没有通常的connection cursor 机制,不知道怎么想的……
懒得搭理,不贴代码了。
2 jdbc.core
:dependences
[funcool/clojure.jdbc "0.9.0"]
使用时
(require '[jdbc.core :as jdbc])
https://funcool.github.io/clojure.jdbc/latest/#introduction
这个中规中矩的。有通常的connection cursor ,但是连接db时用的db-spec的定义和前面那个不一样,另搞了一套,也没什么可说的。平淡无奇,感觉就是py里的psycopg2
3 clj-postgresql
https://github.com/remodoy/clj-postgresql
这个因为专门针对pg所以有点很多:
1 支持用环境变量PGHOST, PGPORT, PGUSER PGDATABASE定义连接参数 免去硬编码,这对运行在docker容器里的应用尤其方便。docker-compose里设置就好了。
2 居然支持postgis的类型!
那么就用它了!
:dependences[clj-postgresql "0.7.0"]
每个库在github上星都是区区几百而已。用Clojure的人真的很少啊