Python 向上插入Postgres中的词典列表
我试图插入到表中,如果它存在(我认为这是由主键决定的,在本例中是prod_id),我希望它只覆盖行 下面是我不完整的尝试。做更新集似乎是我需要的,但不知道如何使用它在这里Python 向上插入Postgres中的词典列表,python,postgresql,Python,Postgresql,我试图插入到表中,如果它存在(我认为这是由主键决定的,在本例中是prod_id),我希望它只覆盖行 下面是我不完整的尝试。做更新集似乎是我需要的,但不知道如何使用它在这里 items = [ {'prod_id': 'a2226', 'name': "TV", 'price': 5555}, {'prod_id': 'b5221', 'name': "Speakers", 'price': 2522}, ] cols = i
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)
我认为如果不提及列名,你是无法做到这一点的。您必须在update语句中逐个提到列名,不仅在
upsert
中,而且在update
语句中也是这样。您需要在这里花费更多的时间。对于初学者,您遗漏了sql.sql(“插入…”.format()