gpt4 book ai didi

sql - 使用后现代将 json 数据插入 postgresql 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:46 24 4
gpt4 key购买 nike

我想向我的数据库中插入大量 JSON 数据。

[{
"term": "wine",
"name": "Bubba Wine & Spirits",
"address": "1234 N San Fake Rd,"
}, {
"term": "wine",
"name": "Wine Shop",
"address": "123 N Not Real Blvd,"
}]

我使用 cl-json 转换为 lisp 对象。

(defvar *data*
(decode-json (open "my-json-file.json")))

结果如下:

(((:TERM . "wine") (:NAME . "Bubba Wine & Spirits")
(:ADDRESS . "1234 N San Fake Rd,"))
((:TERM . "wine") (:NAME . "Wine Shop")
(:ADDRESS . "123 N Not Real Blvd,")))

后现代 列出了一种使用 insert-rows-into 插入多行的方法:https://sites.google.com/site/sabraonthehill/postmodern-examples/postmodern-insert#multiple-row-inserts

(:insert-rows-into 'table :columns 'a 'b :values '((10 20) (30 40)))

这不是默认的 JSON 格式。

看起来我有两个选择:

  1. 调整数据以适应
  2. 找到一个接受它的函数。

我怀疑 :insert-rows-into 做了我想要的,但我不太确定如何将它塞进去。

最佳答案

这有帮助吗?

(defun compose (&rest fns)
(lambda (x)
(reduce #'funcall fns :initial-value x :from-end t)))

(defun quotify (x)
`',x)

(defun guess-columns (data *package*)
(mapcar (compose #'quotify #'intern #'symbol-name #'first) (first data)))

(defun guess-values (data)
(loop for x in data collect (mapcar #'cdr x)))

(defun insert-rows (data package)
`(:insert-rows-into 'table :columns ,@(guess-columns data package)
:values ',(guess-values data)))

用您的*data* 调用insert-rows 给出结果

(:INSERT-ROWS-INTO 'TABLE :COLUMNS 'TERM 'NAME 'ADDRESS :VALUES
'(("wine" "Bubba Wine & Spirits" "1234 N San Fake Rd,")
("wine" "Wine Shop" "123 N Not Real Blvd,")))

关于sql - 使用后现代将 json 数据插入 postgresql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com