【发布时间】:2021-06-15 21:23:46
【问题描述】:
我正在尝试更新 postgres 中的 json 列(这是使用执行值的批量更新)。我通过 API 接收一个 json 对象。我将整个对象插入到分类为 json 列的一列中
CREATE TABLE my_table(
id SERIAL PRIMARY KEY,
event_data json NOT NULL default '{}'::JSON,
createdt timestamp NOT NULL DEFAULT now()
);
我的更新脚本如下所示:
UPDATE my_tableAS t
SET event_data = e.event_data::json
FROM (VALUES %s) AS e(id, event_data)
WHERE t.id= e.id
RETURNING *
我事先对所有 json 进行了 json.dumps
event_list.append([event['id'], json.dumps(event['data'])])
一旦我得到完整的行,我会这样处理数据:
return json.loads(json.dumps(update_data, default=date_converter))
当直接插入 json 值时,这一切都可以正常工作,我在插入之前转储值,然后在返回的行上执行 json.dumps/loads。一切正常。只是更新方法。
以下是更新时通过 api 返回数据的方式:
[
{
"id": 170152,
"event_data": "{\"commenttxt\": \"Test comment\", \"descrtxt\": \"HELLO WORLD\", \"eventcmpltflg\": false, \"eventcmpltontmflg\": false, \"active\": true}",
"createdt": "2021-03-18T08:34:07Z"
}
]
这就是我在插入时收到它的方式:
[
{
"id": 170152,
"event_data": {
"commenttxt": "Test comment",
"descrtxt": "Test descr",
"eventcmpltflg": false,
"eventcmpltontmflg": false,
"active": true
},
"createdt": "2021-03-18T08:34:07Z"
}
]
如果我删除 event_list.append 部分中的 json.dumps,我会收到错误“无法调整字典类型”。
在某些情况下,我不会替换 json 中的单个元素。我正在用一组新的 json 更新整个专栏。我使用不同的表来跟踪已更改的历史/审计跟踪的更改。我使用 json 列是因为不同的团队使用不同的值,因为他们的需求可能不同,因此与其使用包含一百万列的表来处理不同的团队,json 似乎是管理它的最佳方式。
感谢您的帮助。
【问题讨论】:
标签: python json postgresql sql-update psycopg2