标签: hugsql

使用Clojure/Hugsql处理nil参数

我正在使用带有Clojure的Hugsql来访问Postgresql数据库.我的几个数据库表都有可选列 - 举个简单的例子,考虑一个带有各种地址列的"用户"表 - address1,address2,city等.

当我为"更新"编写Hugsql查询规范时,我不知道我传入的地图中将出现哪些值.所以如果我写一个查询:

-- :name update-user! :! :n
UPDATE users set firstname = :firstname, address1 = :address1 where id = :id
Run Code Online (Sandbox Code Playgroud)

但传入用户地图

(update-user! {:id "testuser" :firstname "Bartholamew"})
Run Code Online (Sandbox Code Playgroud)

然后抛出一个异常.我希望它可以创造类似的东西

UPDATE users SET firstname='Bartholamew', address1=NULL where id='testuser'
Run Code Online (Sandbox Code Playgroud)

我查看了Hugsql源代码 - 它调用了一个(validate-parameters)函数,该函数抛出了我无法看到的异常.我确定我遗漏了一些明显的东西:这似乎不是一个不寻常的要求,我确定不想为可选列的每个可能组合编写不同的SQL查询规范.

有没有办法处理我遗漏的缺失参数?我是否通过使用可选列来滥用数据库?

database clojure hugsql

6
推荐指数
1
解决办法
830
查看次数

使用hugSQL def-db-fns宏时如何使用clj-kond避免未解析的符号?

我使用 VS Code Calva扩展编写 Clojure ,它使用clj-kondo对我的代码执行静态分析。

我正在使用HugSQL从 SQL 查询和语句创建 Clojure 函数。

我知道我可以使用像conman这样的库来处理数据库连接和 HugSQL 集成,事实上我过去使用过它并且我喜欢它,但这次我想保持原样并自己与 HugSQL 交谈。

HugSQL 的def-db-fns宏接受一个 SQL 文件,并根据该文件中包含的 SQL 查询和语句创建 Clojure 函数。

我下面的代码有效,但 clj-kondo 抱怨这seed-mytable!是一个未解析的符号。

(ns my-app.db
  "This namespace represents the bridge between the database world and the clojure world."
  (:require [environ.core :refer [env]]
            [hugsql.core :as hugsql]
            [nano-id.core :refer [nano-id]]))

;; This create the function seed-mytable!, but clj-kondo doesn't (cannot?) know it.
(hugsql/def-db-fns "sql/mytable.sql")

;; The functions …
Run Code Online (Sandbox Code Playgroud)

clojure hugsql vscode-calva clj-kondo

6
推荐指数
1
解决办法
998
查看次数

如何让postgres忽略带有重复键的插入但继续前进

我将内存中的记录数据插入到postgres中,并希望数据库忽略数据库中已存在的任何记录(由于具有相同的主键),但继续使用其余的插入.

我正在使用clojure和hugsql,顺便说一下,但我猜测答案可能与语言无关.

因为我基本上以这种方式将数据库视为一组,所以我可能正在参与反模式.

sql postgresql clojure sql-insert hugsql

5
推荐指数
1
解决办法
1996
查看次数

Clojure 中的 PGobject 类型转换

我在使用 Hugsql 时遇到了 Clojure 中的类型转换问题。我是 Clojure 的新手,也是 SQL 的新手,如果我能得到任何帮助,我将不胜感激。

我们最近迁移了我们的 PostgreSQL 数据库,所以一列是一个 json 数组而不是一个字符串——迁移看起来像:

ALTER TABLE customers ALTER id TYPE JSON USING json_build_array(id);

但是现在当我查询该数据时,类型是 PGobject 而不是我希望的集合。当我在寻找:

  • ["id-123"]

实际返回值是

  • #object[org.postgresql.util.PGobject 0x7ff0434e "[\"id-123\"]"]

我花了一些时间寻找如何进行类型转换,但没有运气。如何在 Clojure 中将此响应的类型转换为集合或序列?谢谢你的帮助!

clojure type-conversion hugsql

4
推荐指数
1
解决办法
919
查看次数

记录由HugSQL执行的sql语句/查询

我想记录HugSQL执行的所有SQL字符串.我查看了文档,但找不到任何内容.什么是推荐的方式?

logging clojure hugsql

1
推荐指数
1
解决办法
452
查看次数