我正在尝试使用clojure.java.jdbc进行多插入
多插入的结构就是这样的
(jdbc/multi-insert! db-spec :table_name
{:col1 "d1" :col2 "d2" :col3 "d3"}
{:col1 "d4" :col2 "d5" :col3 "d6"}...)
Run Code Online (Sandbox Code Playgroud)
但是我有像这样的矢量数据
[
{:col1 "d1" :col2 "d2" :col3 "d3"}
{:col1 "d4" :col2 "d5" :col3 "d6"}
]
Run Code Online (Sandbox Code Playgroud)
我如何构造数组并将内容作为单独的参数传递?
您可以使用apply一个参数列表来调用函数.
> (str "Clo" "jure")
"Clojure"
> (apply str ["Clo" "jure"])
"Clojure"
Run Code Online (Sandbox Code Playgroud)
你的情况,你想申请jdbc/multi-insert!包含一个列表db-spec,:table_name以及所有从现有的矢量地图.
(def data [{:col1 "d1" :col2 "d2" :col3 "d3"}
{:col1 "d4" :col2 "d5" :col3 "d6"}])
(apply
jdbc/multi-insert!
(conj [db-spec :table_name] data))
Run Code Online (Sandbox Code Playgroud)
我们只是conj用来创建参数列表,然后将其传递给apply.
正如Alex指出的那样,签名apply实际上允许您首先传递内联参数,只要最终参数是一个列表.您可以在不使用的情况下重写该示例conj.
(apply
jdbc/multi-insert!
db-spec :table_name data)
Run Code Online (Sandbox Code Playgroud)