亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

若我想批量插入,該怎么操作?是這樣拼多個?還是有更簡便的寫法?

若我想批量插入,該怎么操作?是這樣拼多個?還是有更簡便的寫法?

慕后森 2023-05-03 11:11:30
Clojure 新手求教(sql/with-connection mysql-db   (sql/insert-records :fruit     {:name "Apple" :appearance "rosy" :cost 24}     {:name "Orange" :appearance "round" :cost 49}     {:name "Orange" :appearance "round" :cost 49}     .     .     .     ))
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

一般來說可以直接使用insert!函數,比如

(defn insert-rows-fruit  "Insert complete rows"
  [db]
  (j/insert! db
    :fruit
    nil ; column names not supplied
    [1 "Apple" "red" 59 87]
    [2 "Banana" "yellow" 29 92.2]
    [3 "Peach" "fuzzy" 139 90.0]
    [4 "Orange" "juicy" 89 88.6]))

也可以這樣使用:

(defn insert-records-fruit
  "Insert records, maps from keys specifying columns to values"
  [db]
  (j/insert! db    :fruit
    {:name "Pomegranate" :appearance "fresh" :cost 585}
    {:name "Kiwifruit" :grade 93}))

有需要逐條插入的話可以使用doseq 比如

(doseq [to-insert [{:name "Apple" :appearance "rosy" :cost 24}
                   {:name "Orange" :appearance "round" :cost 49}
                   {:name "Orange" :appearance "round" :cost 49}]]
  (sql/insert-records :fruit to-insert))

你還可以使用zipmap函數, zipmap函數接受一組鍵和一組值,返回一個hash-map,相當于

(apply hash-map (apply concat (interleave [:k1 :k2 :k3] [v1 v2 v3])))

所以你可以這樣寫:

(sql/with-connection mysql-db
  (let [coll-to-insert (map (partial zipmap [:name :appearance :cost])
                            [["Apple" "rosy" 24]
                             ["Orange" "round" 49]
                             ["Orange" "round" 49]
                             .
                             .
                             .
                             ])]
    (apply (partial sql/insert-records :fruit) coll-to-insert)))


查看完整回答
反對 回復 2023-05-06
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號