我正在尝试使用clojure.java.jdbc进行多插入
多插入的结构是这样的
(jdbc/multi-insert! db-spec :table_name
{:col1 "d1" :col2 "d2" :col3 "d3"}
{:col1 "d4" :col2 "d5" :col3 "d6"}...)
但是我有像这样的载体中的数据
[
{:col1 "d1" :col2 "d2" :col3 "d3"}
{:col1 "d4" :col2 "d5" :col3 "d6"}
]
如何构造数组并将内容作为单独的参数传递?
答案 0 :(得分:7)
您可以使用apply
来调用带有参数列表的函数。
> (str "Clo" "jure")
"Clojure"
> (apply str ["Clo" "jure"])
"Clojure"
在您的情况下,您希望将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))
我们只是使用conj
创建参数列表,然后将其传递给apply
。
正如Alex指出的那样,apply
的签名实际上允许您首先传递内联参数,只要最终参数是一个列表。您可以在不使用conj
的情况下重写该示例。
(apply
jdbc/multi-insert!
db-spec :table_name data)