psycopg3 将字典插入 JSONB 字段

问题描述 投票:0回答:1

我有一个带有

JSONB
字段的表,想使用命名字典插入其中,如下所示:

sql = "INSERT INTO tbl (id, json_fld) VALUES (%(id)s, %(json_fld)s)"
conn.execute(sql, {'id':1, 'json_fld': {'a':1,'b':false, 'c': 'yes'}});

我尝试了这个问题中的答案,但这些都适用于 psycopg2 而不是 psycopg3 并且它们在这里不起作用(特别是我尝试过):

conn.execute(sql, {'id':1, 'json_fld': json.dumps({'a':1,'b':false, 'c': 'yes'})});

错误仍然相同:

psycopg.ProgrammingError:无法使用占位符调整类型“dict” '%s'(格式:自动)

python postgresql jsonb psycopg3
1个回答
0
投票

您可以在 psycopg3 中通过首先使用

json.dumps
函数将字典转换为 JSON 来实现此目的。

data = {
    'id': 1,
    'json_fld': {'a': 1, 'b': False, 'c': 'yes'}
}

json_data = json.dumps(data['json_fld'])

sql = "INSERT INTO tbl (id, json_fld) VALUES (%(id)s, %(json_fld)s)"

cursor.execute(sql, {'id': data['id'], 'json_fld': json_data})

conn.commit()
© www.soinside.com 2019 - 2024. All rights reserved.