我正在使用带有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查询规范.
有没有办法处理我遗漏的缺失参数?我是否通过使用可选列来滥用数据库?
我使用 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) 我将内存中的记录数据插入到postgres中,并希望数据库忽略数据库中已存在的任何记录(由于具有相同的主键),但继续使用其余的插入.
我正在使用clojure和hugsql,顺便说一下,但我猜测答案可能与语言无关.
因为我基本上以这种方式将数据库视为一组,所以我可能正在参与反模式.
我在使用 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 中将此响应的类型转换为集合或序列?谢谢你的帮助!
我想记录HugSQL执行的所有SQL字符串.我查看了文档,但找不到任何内容.什么是推荐的方式?
clojure ×5
hugsql ×5
clj-kondo ×1
database ×1
logging ×1
postgresql ×1
sql ×1
sql-insert ×1
vscode-calva ×1