Json使用python导入postgresql



我正试图用以下代码将多个json文件导入到我的postgres数据库中。

import json
import psycopg2

con = psycopg2.connect(database="kw_du", user="postgres", password="f67dd8hzFE5",host="localhost")

cur = con.cursor()
with open(r"C:UsersdiegoOneDriveDesktopWorkplace220906nu_2022_09_01.json", 'r') as data_file:
data = json.load(data_file)
with con.cursor() as cur:
cur.executemany('INSERT INTO test_nu(vp_ip, system_activ, vpm_activ) VALUES(%s)', [(json.dumps(d),) for d in data])
con.commit()
con.close()

json文件具有以下结构:

[{"vp_id":1,"system_activ":1,"vpm_activ":1},{"vp_id":2,"system_activ":2,"vpm_activ":2}]

当执行代码时,我得到以下错误消息:

第13行,位于cur.executemany('INSERT INTO test_nu(vp_id,system_aktiv(VALUES(%s(',[(json.dumps(d(,(for d in data](psycopg2.errors.SyntaxError:ERROR:INSERT有更多目标列比表达式第1行:插入test_nu(vp_id,system_aktiv(VALUES("{"vp_id":…

我看到,错误:INSERT的目标列比表达式多可能有各种原因,我无法解决这个问题。"或{}可能有问题吗?"?json对象似乎没有被解析VALUES('{quot;vp_id":…感谢任何提示。

您可以使用以下命令将多次往返保存到数据库:

with expand as (
select (j->>'vp_id')::int as vp_ip,
(j->>'system_activ')::int as system_activ,
(j->>'vpm_activ')::int as vpm_activ
from jsonb_array_elements((%s)::jsonb) as el(j)
)
insert into test_nu (vp_id, system_activ, vpm_activ)
select vp_ip, system_activ, vpm_activ
from expand;

json.dumps(data)传递到此查询。

Fiddle Here

您可以使用json_populate_recordset

参考下面的示例查询-

insert into test_nu(vp_id, system_activ, vpm_activ) select * from json_populate_recordset(NULL::test_nu,'[{"vp_id": 1,"system_activ":"eewrw","vpm_activ":"qeqerqr"}]')

在这里打闹。

最新更新