clojure with postgres

 主要关注访问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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua入门

https://en.blog.nic.cz/2015/08/12/embedding-luajit-in-30-minutes-or-so/

shell脚本传可选参数 getopts 和 getopt的方法

写了一个shell脚本,需要向shell脚本中传参数供脚本使用,达到的效果是传的参数可以是可选参数 下面是一个常规化的shell脚本: echo "执行的文件名为: $0";echo "第一个参数名为: $1";echo "第二个参数名为: $2"…

Teams Tab App 代码深入浅出 - 配置页面

上一篇文章我们使用Teams Toolkit 来创建、运行 tab app。这篇文章我们深入来分析看一下tab app 的代码。 先打开代码目录,可以看到在 src 目录下有入口文件 index.tsx,然后在 components 目录下有更多的一些 tsx 文件,tsx 是 typescript的一…

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)的代码,以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址,提供了源代码,以及相关使用方…

EpSON TM-82II驱动在POS系统上面安装问题处理

按照品牌名称,在网上下载的安装包为apstmt82.rar 下面讲解一下,如何的解决爱普生打印机在POS机器上面的安装问题,这个算是一个比较奇特的故障问题,不像其它的新北冰洋(SN3C)的U80_U80II,SeNor的…

打印图片的属性和实现另存图片功能以及使用numpy

上一篇我们已经学了如何读取图片的功能了以及和opencv的环境搭建了,今天接着来学习,哈哈哈,今天刚好五一,也没闲着,继续学习。 1、 首先我们来实现打印出图片的一些属性功能, 先来看一段代码: 1…

Ubuntu 18.04下命令安装VMware Tools

2019独角兽企业重金招聘Python工程师标准>>> sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 转载于:https://my.oschina.net/u/574036/blog/1829455

phpstorm PHP language level无法选择

phpstorm PHP7新特性一直提示红色波浪线,应该是没有设置PHP 版本,但是打开PHPstorm---preference--lannguage&frameworks--PHP , 发现PHP language level 无法选择PHP7.2 ,查看旁边的提示信息说是同步了composer 的原因&#…

Qfile

打开方式: 1 void AddStudents::write_to_file(QString src){2 QFile file("stu.txt");3 if (!file.open(QIODevice::Append | QIODevice::Text)){4 QMessageBox::critical(this,"打开文件错误","确认");5 r…

多层装饰器、带参数装饰器

# 带参数的装饰器 # import time # FLAGE False # 加个标志位,使全部的装饰器可以失效或有效 # def timmer_out(flag): # def timmer(func): # def inner(*args,**kwargs): # if flag: # start time.time() # …

IDEA svn 菜单不见了,解决方法

2019独角兽企业重金招聘Python工程师标准>>> 参考地址: http://www.cnblogs.com/signheart/p/193448a98f92bd0cc064dbd772dd9f48.html,我是第二种方法解决的! 转载于:https://my.oschina.net/liuchangng/blog/1829679

苏宁易购:Hadoop失宠前提是出现更强替代品

在笔者持续调研国内Hadoop生态系统生存现状的同时,KDnuggets发布的2018年数据科学和机器学习工具调查报告再次将“Hadoop失宠”言论复活。报告一出,“Hadoop被抛弃”几个字瞬时成为各大标题党的最爱,充斥在不同的新闻平台。这些报告和数据是否…

VS2017生成一个简单的DLL文件 和 LIB文件——C语言

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动…

Hive数据类型及文本文件数据编码

本文参考Apache官网,更多内容请参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManualTypes 1. 数值型 类型支持范围TINYINT1-byte signed integer, from -128 to 127SMALLINT2-byte signed integer, from -32,768 to 32,767INT/INTEGE…

Python绘图Turtle库详解

转载:https://blog.csdn.net/zengxiantao1994/article/details/76588580 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令…

(待完成)qbxt2019.05 总结2 - 数位DP

数位 DP 严格来说其实并不是 DP……它只是个单纯的计数问题 但是怎么说呢……现在大家似乎都把数位 DP 叫这个名字,所以……我们还是……叫它 DP 额什么是数位 DP 呢? 一句话概括——一类求在 K 进制下m满足条件的数的数量有多少个的算法 常见的问题形式…

mac使用brew update无反应解决办法

为什么80%的码农都做不了架构师?>>> mac系统中使用brew作为包管理工具,类似centos中的yum,ubuntu中的apt-get,在使用brew update的使用,有时候会长时间无反应,或者中途断开连接,这是…

2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告

目录 北京电子科技学院(BESTI)实验报告实验名称:实验三 敏捷开发与XP实践实验内容、步骤与体会:一、实验三 敏捷开发与XP实践-1二、实验三 敏捷开发与XP实践-2三、实验三 敏捷开发与XP实践-3四、实验三 敏捷开发与XP实践-4五、代码…

(八)路径(面包屑导航)分页标签和徽章组件

一&#xff0e;路径组件 路径组件也叫做面包屑导航。 <ol class"breadcrumb"><li><a href"#">首页</a></li><li><a href"#">产品列表</a></li><li><a href"#">大…

第十周总结

失望光年转载于:https://www.cnblogs.com/daisy99lijing/p/11064924.html