主要关注访问pg。不关心其他db

1 clojure.java.jdbc

https://github.com/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 korma

这个更类似SQLalchmey,访问哪个table前,还要声明一下table格式,疯了! 就是为了摆脱这种OO风格才投奔lisp的啊啊啊!

4 clj-postgresql

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的类型!

这才是真正节约废话套话,专注表达的库

那么就用它了!

:dependences
[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写起.

转载于:https://www.cnblogs.com/xuanmanstein/p/10795496.html

clojure with postgres相关推荐

  1. Clojure入门教程: Clojure – Functional Programming for the JVM中文版

    http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/ api:h ...

  2. Clojure – Functional Programming for the JVM中文版

    Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由xumingming 作者: xumingming | 可以 ...

  3. Clojure入门教程

    Clojure入门教程: Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由 xumingming 作者: x ...

  4. A monad tutorial for Clojure programmers (part 3)

    Before moving on to the more advanced aspects of monads, let's recapitulate what defines a monad (se ...

  5. postgres默认安装后有哪些表_Greenplum 行存、列存,堆表、AO表的原理和选择

    行存和列存的原理 什么时候选择行存 什么时候选择列存 堆表和AO表的原理 什么时候选择堆表 什么时候选择AO表 测试对比行存deform和列存的性能差别 如何查看表的存储结构 Greenplum支持行 ...

  6. 《Clojure数据分析秘笈》——1.6节从JDBC数据库读取数据

    本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第1章,第1.6节从JDBC数据库读取数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社 ...

  7. Clojure程序设计

    <Clojure程序设计> 基本信息 作者: (美)Stuart Halloway Aaron Bedra [作译者介绍] 出版社:人民邮电出版社 ISBN:9787115308474 上 ...

  8. postgres语法_SQL Create Table解释了MySQL和Postgres的语法示例

    postgres语法 A table is a group of data stored in a database. 表是存储在数据库中的一组数据. To create a table in a d ...

  9. linux安装配置postgres及使用dblink

    好久不写东西,一直在看些开源的东西,下面贴下linux上安装配置postgres及使用dblink的操作参考,以供读者和自己今后参考: 1.下载源码:postgresql-9.3.2.tar.gz 2 ...

最新文章

  1. pku 1185 炮兵阵地
  2. academic division at cssa
  3. JavaScript设计模式——单例模式的理解与应用
  4. [css] 说说你对jpg、png、gif的理解,分别在什么场景下使用?有使用过webp吗?
  5. 服务器为什么进入pe找不到硬盘,进PE系统找不到硬盘怎么办?看电脑大神怎么做的!...
  6. apipost--接口测试脚本编写if判断语句使用
  7. 同样学软件测试,为什么有些人一面试就拿一堆大厂offer?
  8. 2010-05-19 项目升级计划
  9. python编写spark程序 视频_【Python版pyspark】Spark大数据基础入门视频课程
  10. Android从启动到程序运行整个过程的整理
  11. Windows系统 卸载 flash助手推荐弹窗
  12. JAVA微信公众号(三) 群发消息
  13. C#无损高质量压缩图片实现代码
  14. a卡是什么?a卡和n卡的区别
  15. 【算法】【感悟】LCP 03. 机器人大冒险
  16. 爬取豆瓣音乐Top250详细教程
  17. 网络是怎样连接的?从浏览器输入URL开始
  18. 截图热键冲突:关闭360截图功能建议使用QQ截图
  19. MuleSoft知识总结-4.使用RAML设计接口
  20. P4:正则表达式(Regular Expression)学习笔记

热门文章

  1. 主页是单一的HTML文件,什么是主页,下列说法最为准确的是 _____。
  2. linux编译准备,Linux 下编译指南
  3. 转list_你知道Java数组转List的三种方式及对比吗?
  4. 提高国内访问GitHub速度的9种方案~
  5. 推荐一款免费国产远程办公神器ToDesk,TeamViewer完美替代品
  6. 前端简洁并实用的工具类 (推荐收藏)
  7. c语言des算法实验报告,C语言实现DES算法实验报告解析.doc
  8. JAVA输出x和y和z_JAVA实例:输入三个整数x,y,z,请把这三个数由小到大输出-吾爱编程网...
  9. react 给一个引用的组件添加新属性_高阶组件在React中的应用
  10. 视觉工程师面试指南_选择正确视觉效果的终极指南