使用Python在Postgresql中存储Json对象数组

使用Python在Postgresql中存储Json对象数组,python,arrays,json,postgresql,psycopg2,Python,Arrays,Json,Postgresql,Psycopg2,我目前正在尝试使用psycopg2将两个json对象列表存储到我的postgresql数据库中,但没有成功 这是我想做的一个片段 SQL_INSERT_QUERY = """INSERT INTO table ( x, json_list_one, json_list_two

我目前正在尝试使用psycopg2将两个json对象列表存储到我的postgresql数据库中,但没有成功

这是我想做的一个片段

SQL_INSERT_QUERY = """INSERT INTO table (
                              x,
                              json_list_one,
                              json_list_two
                            ) VALUES (%s, %s, %s)"""

def insert_stuff(id, json_list_one, json_list_two):
values = (
    id,
    map(psycopg2.extras.Json, json_list_one),
    map(psycopg2.extras.Json, json_list_two)
)
conn = get_connection_pool().getconn()
try:
    cur = conn.cursor()
    cur.execute(SQL_INSERT_QUERY, values)
    conn.commit()
    cur.close()
finally:
    get_connection_pool().putconn(conn)
此当前实现导致此错误

An exception of type ProgrammingError occured. Arguments:
('column "json_list_one" is of type json[] but expression is of type text[]\nLINE 5: ...) VALUES (\'9527d790-31dc-46fa-b683-c6fc9807c2a4\', ARRAY[\'{"h...\n                                                             ^\nHINT:  You will need to rewrite or cast the expression.\n',)
有人知道我应该如何在PostgreSQL中插入json对象数组吗


谢谢。

您需要使用
json
库并调用
json.dumps(这里是dict_)
。Postgres中不支持Json类型。使用
json.dumps
将字典转换为json字符串,使用
json.loads
将字典转换回字典。

您需要使用
json
库并调用
json.dumps(此处为dict_)
。Postgres中不支持Json类型。您可以使用
json.dumps
将字典转换为json字符串,使用
json.loads
将字典转换回字典。

您需要将值强制转换为子--


如果您使用PostgreSQL 9.5或更高版本,则需要通过json字段进行查询,最好将json更改为jsonb。Jsonb允许创建GIN索引,而不允许提高查询的性能。

您需要将值转换为son--

如果您使用PostgreSQL 9.5或更高版本,则需要通过json字段进行查询,最好将json更改为jsonb。Jsonb允许创建GIN索引,而不允许提高查询性能。

从这里开始:

从这里开始:


实际上,PosgreSQL确实支持Json类型(从9.3开始)。我在其他表中存储了Json(不是作为数组),实际上PosgreSQL支持Json类型(从9.3开始)。我已将Json(不是数组)存储在其他表中。这将返回
详细信息:数组值必须以“{”或维度信息开头。可能有什么问题?默认情况下,postgres将未知数据转换为文本。正如您在错误
列中看到的,“Json\u list\u one”类型为Json[],但表达式类型为text[]
而不是字段的错误类型-
text[]
而不是
json[]
。这将返回
详细信息:数组值必须以“{”或维度信息开头。
可能有什么错?默认情况下,postgres将未知数据转换为文本。正如您在错误
列中看到的那样,“json\u list\u one”是json[]但是表达式的类型是text[]
而不是字段的错误类型-
text[]
而不是
json[]
。这个答案为我解决了这个问题这个答案为我解决了这个问题
SQL_INSERT_QUERY = """INSERT INTO table (
                              x,
                              json_list_one,
                              json_list_two
                            ) VALUES (%s, %s::json[], %s::json[])"""
from psycopg2.extras import Json

cur = conn.cursor()

cur.execute('INSERT into some_table (uuid, dict) values (%s, %s)',
    ['testName', Json([{'name':'test','number':'444-444-4444'}, {'name':'test','number':'555-555-5555'}])])
#the rest of it