zoukankan      html  css  js  c++  java
  • clojure with postgres

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

    1 clojure.java.jdbc

    这个最广,需要配合不同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写起.

  • 相关阅读:
    vue 加载更多2
    vue 加载更多
    js获取浏览器信息
    iscroll
    git fetch
    input file accept类型
    git从安装到使用
    sass中的循环判断条件语句
    animation
    vue2+animate.css
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/10795496.html
Copyright © 2011-2022 走看看