我使用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
条款吗?