我试图插入到表中,如果它存在(我认为这仅由主键决定,在这种情况下是 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)