【发布时间】:2019-07-22 10:41:16
【问题描述】:
如果“raw_data”表中的“info”列与现有的不同,我想更新它。
“info”是 JSON 数据类型。
例如,如果“info”数据存在,则什么都不做,否则更新。
代码和尝试:
如果我使用以下代码:
cursor = connection.cursor()
postgres_insert_query =
"""
INSERT INTO raw_data (Timestamp, IMIE, info) VALUES (%s,%s,%s)
ON CONFLICT (Timestamp)
DO UPDATE SET
info = EXCLUDED.info
WHERE raw_data.info IS DISTINCT FROM EXCLUDED.info;"""
record_to_insert = (int(timestamp), int(imei), json_file)
cursor.execute(postgres_insert_query, record_to_insert)
connection.commit()
错误:
然后我会收到以下错误:
psycopg2.errors.InFailedSqlTransaction:当前事务是 中止,在事务块结束之前忽略命令
示例/伪代码:
什么都不做案例:
If Current "info" = {someData: 'ON'}
Existing "info" = {someData: 'ON'}
Then Do Nothing
更新案例:
If Current "info" = {someData: 'OFFFFFFFFFFF'}
Existing "info" = {someData: 'ON'}
UPDATE the "info"
【问题讨论】:
-
@GordonLinoff,感谢您的回复,正如我所建议的那样,我已经添加了示例数据并需要。
-
@a_horse_with_no_name,你说得对,我已经添加了错误信息。
-
错误“current transaction is aborted, commands ignored until end of transaction block”表示在您运行最后一条语句之前还有其他问题
标签: sql json postgresql psycopg2