Неверный синтаксис ON CONFLICT при вставке в базу данных - PullRequest
0 голосов
/ 31 мая 2019

Попытка вставить данные в новую пустую таблицу с уникальными ограничениями. Когда я удаляю оператор ON CONFLICT, код сразу выдает ошибку с нарушением ограничения уникальности при первой попытке вставки, даже если таблица пуста. Когда я удаляю уникальные ограничения из таблицы, при повторном запуске кода данные дублируются.

Я бы хотел, чтобы вставка проверяла, существует ли строка, и ничего не делает, и, если она не существует, создает новую запись. Я использую Postgres 11.3 на Mac OSX. Любая помощь приветствуется.

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 голосов
/ 31 мая 2019

Ваше исправление должно быть действительно простым, поскольку у вас просто строка 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()
...