Занести в БД значения из списка, которых в этой базе еще нет

Всем добрый день. Столкнулся с такой задачей. Имеется список из данных, который программа получает извне. Необходимо занести в таблицу базы PostgreSQL элементы из этого списка, которых еще нет в таблице. Моя реализация выглядит так (Используется SQLAlchemy):

Считать данные из базы во множество

engine = create_engine("postgresql://*******:******@localhost:5432/******", future=True)
engine.connect()

Base = declarative_base()
metadata = MetaData(bind=engine)

unit_table = Table('unit', metadata, autoload=True)

# Считывание
stmt = select(unit_table.c.name)
units = set()
for el in conn.execute(stmt).fetchall():
    units.add(el[0])

Найти уникальные элементы из полученного множества, и текущего списка преобразованного во множество(во избежание дублирования элементов)

new_units = ["М", "Км/Ч", "М/С"]
unique_units = set(new_units) - units

И далее заношу эти элементы в таблицу бд

conn.execute(insert(unit_table),[{"name": value} for value in (unique_units)],)
conn.commit()

В моем способе мне не нравится то, что данные сначала считываются, потом преобразуются, и только потом после этого добавляются уникальные элементы. Считаю этот процесс не оптимальным не по времени не по памяти, особенно на большом количестве данных.

Как оптимизировать данный процесс? Возможно ли реализовать процесс добавления отсутствующих данных в таблицу базы, из набора, которые присутствуют в этом наборе, но отсутствуют в таблице без считывания данных из базы?

Python 3.11.1, SQLAlchemy 1.4.43, PostgreSQL 15.3.1


Ответы (0 шт):