插入数据库时​​无效的语法ON CONFLICT

时间:2019-05-31 15:17:20

标签: python postgresql psycopg2

尝试将数据插入具有唯一约束的新空表中。当我删除ON CONFLICT语句时,即使表为空,代码错误也会立即出现,并违反第一次插入尝试中的唯一约束。当我从表中删除唯一约束时,重新运行代码时将复制数据。

我希望插入程序验证该行是否存在,不执行任何操作,如果不存在,则进行新输入。我在Mac OSX上运行postgres 11.3。任何帮助表示赞赏。

psycopg2.extras.execute_values(cur,
    "insert  into ferc_hots (html,link) values %s",
    values)
on conflict (html,link) do nothing

con.commit()  
print("Records inserted successfully")  
con.close()

1 个答案:

答案 0 :(得分:0)

您的修复工作应该真的很简单,因为您将on conflict行放在错误的位置。

psycopg2.extras.execute_values(cur,
    """insert  into ferc_hots (html,link) values %s
       on conflict (html,link) do nothing""", # Moved to inside SQL
    values)

con.commit()  
print("Records inserted successfully")  
con.close()