Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向上插入Postgres中的词典列表_Python_Postgresql - Fatal编程技术网

Python 向上插入Postgres中的词典列表

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

我试图插入到表中,如果它存在(我认为这是由主键决定的,在本例中是prod_id),我希望它只覆盖行

下面是我不完整的尝试。做更新集似乎是我需要的,但不知道如何使用它在这里

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()