如果主键已存在,如何替换行(" IntegrityError:重复键值")

时间:2017-11-10 16:27:54

标签: postgresql psycopg2

我使用psycopg2将数据插入PostgreSQL表。 我想强制SQL查询覆盖/替换现有行,以防该行已存在(即新行的主键与现有行相同)。

到目前为止,我编写了一个脚本,其中包含JS对象中的一些输入,其中col1是主键:

myInputs = {'tablename': 'november', 'col1': 1, 'col2': 0.1, 'col3': 60}

执行的SQL(使用psycopg2' cursor.execute)如下:

"""INSERT INTO myschema.p{} (  col1,
                               col2,     
                               col3 
                                    ) 
             VALUES         (  {},
                               {},
                               {}   )""".format(
                                               myInputs ["tablename"],
                                               myInputs ["col1"],
                                               myInputs ["col2"],
                                               myInputs ["col3"]                                         
                           )

如果我使用包含类似主键col1的第二组输入运行SQL命令,例如

myInputs2 = {'tablename': 'november', 'col1': 1, 'col2': 10, 'col3': 20}

,我收到以下错误:

psycopg2.IntegrityError: duplicate key value violates unique constraint "pnovember_pkey"
DETAIL:  Key (col1)=(1) already exists.

处理此错误并实现此自动行替换的正确方法是什么?我从未使用它,但最好的方法是使用documentation描述的EXCEPTION条款吗?

0 个答案:

没有答案