Clojure java.jdbc return-keys 选项仅返回一行

Hen*_*rik 5 postgresql jdbc clojure

使用 org.clojure/java.jdbc“0.7.11”和 PostgreSQL 11.5

似乎 return-keys 选项仅返回第一行作为映射,而不是完整列表

例子:

(jdbc/execute!
  db
  "INSERT INTO test_table(letter) VALUES ('A'), ('B');"
  {:return-keys ["letter"]})

=> {:letter "A"}
Run Code Online (Sandbox Code Playgroud)

我希望得到的回报会是这样的({:letter "A"} {:letter "B"})

两行均已毫无问题地插入到数据库中。

我知道我可以使用 insert-multi 来执行此操作并取回行,但我真正想做的是更新,因此它需要执行,只是认为这是显示问题的最简单方法。

有谁知道为什么我只返回一行键,有没有办法返回所有行?

Sea*_*eld 4

我想你可能需要的是:

(jdbc/execute!
  db
  ["INSERT INTO test_table(letter) VALUES (?)"
   ["A"] ["B"]]
  {:return-keys ["letter"] :multi? true})
Run Code Online (Sandbox Code Playgroud)

指定:multi? true会导致库使用.executeBatch而不是,.executeUpdate并且您应该返回多个结果。

如果你使用next.jdbc它,就不会出现这个问题:

(next.jdbc/execute!
  db
  ["INSERT INTO test_table(letter) VALUES ('A'), ('B')"]
  {:return-keys ["letter"]})
Run Code Online (Sandbox Code Playgroud)

这应该返回两个插入的键。

请注意,它clojure.java.jdbc被视为“稳定”,这意味着它不再获得新功能。next.jdbc所有当前和未来的开发工作都将在此时进行(部分原因是上述问题)。next.jdbc是从未有过的 1.0 版本clojure.java.jdbc

https://github.com/seancorfield/next-jdbc