我有一个带有
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'(格式:自动)
您可以在 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()