Postgresql 在postgres 9.5中将包含json对象的数组作为行插入

Postgresql 在postgres 9.5中将包含json对象的数组作为行插入,postgresql,psycopg2,jsonb,Postgresql,Psycopg2,Jsonb,刚开始使用PostgreSQL 9.5,遇到了jsonb列的第一个问题。一段时间以来,我一直在试图找到答案,但失败得很严重。有人能帮忙吗 我在python中有一个json数组,其中包含如下json对象: [{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}] COPY person(person_jsonb) FROM '/path/to/my/json/file.json'; 1. {"name":"foo", "age":"18"

刚开始使用PostgreSQL 9.5,遇到了jsonb列的第一个问题。一段时间以来,我一直在试图找到答案,但失败得很严重。有人能帮忙吗

我在python中有一个json数组,其中包含如下json对象:

[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]
COPY person(person_jsonb) FROM '/path/to/my/json/file.json';
1. {"name":"foo", "age":"18"}
2. {"name":"bar", "age":"18"}
我试图将其插入jsonb列,如下所示:

[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]
COPY person(person_jsonb) FROM '/path/to/my/json/file.json';
1. {"name":"foo", "age":"18"}
2. {"name":"bar", "age":"18"}
但只插入了一行。我希望数组中的每个json对象都是一个新行,如下所示:

[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]
COPY person(person_jsonb) FROM '/path/to/my/json/file.json';
1. {"name":"foo", "age":"18"}
2. {"name":"bar", "age":"18"}
还尝试:

INSERT INTO person(person_jsonb)
                VALUES (%s)
                ,(json.dumps(data['person'])
仍然只有一行被插入。有人能帮忙吗

编辑:根据请求添加python代码

import psycopg2, sys, json

con = None
orders_file_path = '/path/to/my/json/person.json'

try:

    with open(orders_file_path) as data_file:
        data = json.load(data_file)
    con = psycopg2.connect(...)
    cur = con.cursor()
    person = data['person']
    cur.execute("""
                    INSERT INTO orders(orders_jsonb)
                    VALUES (%s)
                """, (json.dumps(person), ))
    con.commit()

    except psycopg2.DatabaseError, e:
        if con:
            con.rollback()

    finally:

        if con:
           con.close()
person.json文件:

{"person":[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]}

假设最简单的模式:

CREATE TABLE test(data jsonb);
选项1:在Python中解析JSON 您需要分开插入PostgreSQL中的每一行,您可以解析并拆分上层数组,然后使用来执行插入,同时每个json数据都已拆分:

import json
import psycopg2

con = psycopg2.connect('...')

cur = con.cursor()

data = json.loads('[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]')

with con.cursor() as cur:
    cur.executemany('INSERT INTO test(data) VALUES(%s)', [(json.dumps(d),) for d in data])

con.commit()
con.close()
选项2:在PostgreSQL中解析JSON 另一个选项是推送:


假设最简单的模式:

CREATE TABLE test(data jsonb);
选项1:在Python中解析JSON 您需要分开插入PostgreSQL中的每一行,您可以解析并拆分上层数组,然后使用来执行插入,同时每个json数据都已拆分:

import json
import psycopg2

con = psycopg2.connect('...')

cur = con.cursor()

data = json.loads('[{"name":"foo", "age":"18"}, {"name":"bar", "age":"18"}]')

with con.cursor() as cur:
    cur.executemany('INSERT INTO test(data) VALUES(%s)', [(json.dumps(d),) for d in data])

con.commit()
con.close()
选项2:在PostgreSQL中解析JSON 另一个选项是推送:


显示要从中复制的文件的某些行。在尝试插入
的位置显示相关代码。感谢您的反馈。我做了一些编辑以包括更多细节:)显示您从中复制的文件的一些行。在尝试插入
的位置显示相关代码。感谢您的反馈。我已经做了一些编辑以包含更多细节:)
executemany
executemany
executemany
executemany
executemany