Postgres 中的 UPSERT 字典列表

时间:2021-05-29 23:48:19

标签: python postgresql

我试图插入到表中,如果它存在(我认为这仅由主键决定,在这种情况下是 prod_id),我希望它只覆盖该行。

以下是我未完成的尝试。 DO UPDATE SET 似乎是我需要的,但不知道如何在这里使用它。

items = [
        {'prod_id': 'a2226', 'name': "TV", 'price': 5555},
        {'prod_id': 'b5221', 'name': "Speakers", 'price': 2522},
]
cols = items[0].keys()
cols_no_primary_key = items[0].keys().remove("prod_id")
query = "INSERT INTO items ({}) VALUES %s ON CONFLICT (prod_id) DO UPDATE SET ({}) = EXCLUDED. ".format(','.join(cols), ','.join(cols_no_primary_key))
vals = [[value for value in item.values()] for item in items]
execute_values(cursor, query, vals)

0 个答案:

没有答案
相关问题