#python #sql #postgresql
Вопрос:
У меня есть такой код,
cursor_local.execute("""SELECT "Name", "Level_Capacity", "Source_NE", "Sink_NE" FROM "table1" WHERE "Name" LIKE '%WDM%' """)
rows = cursor_local.fetchall()
psycopg2.extras.execute_batch(cursor_local, 'INSERT INTO table2("Name", "Level_Capacity", "Source_NE", "Sink_NE") VALUES (%s, %s, %s, %s)', (*rows,) )
connection_local.commit()
и я хотел бы вставить в таблицу 2 только новые записи из таблицы 1 (база данных postgres), только те, которых нет в таблице 2.
В таблице 2 «Идентификатор» генерируется автоматически и уникален (другие не уникальны) , при вставке я хотел бы проверить, существует ли «Имя», «Source_NE», «Sink_NE».
Ответ №1:
является ли «имя» уникальным? может быть, вы можете сделать имя КОНФЛИКТА «НИЧЕГО НЕ ДЕЛАЙ»
INSERT INTO table2
VALUES ,,,
ON CONFLICT 'Name' DO NOTHING;
иначе вы могли бы сделать НЕ В (ВЫБЕРИТЕ «Имя» и т. Д. Из таблицы2) и т. Д.
INSERT INTO table2
VALUES (
SELECT * FROM table1 WHERE ('Name' etc)
NOT IN (SELECT 'Name', etc FROM table2)
)
Ответ №2:
это работает:
INSERT INTO "table2" ("Name", "Level_Capacity", "Source_NE", "Sink_NE")
SELECT "Name", "Level_Capacity", "Source_NE", "Sink_NE"
FROM "table1" WHERE ("Name", "Source_NE", "Source_Port", "Sink_NE", "Sink_Port") NOT IN (SELECT "Name", "Source_NE", "Source_Port", "Sink_NE", "Sink_Port" FROM "table2");
Спасибо