Estoy insertando varios registros de 10k en una base de datos con reglas de integridad REF. Algunas de las filas de datos lamentablemente están duplicadas (en el sentido de que ya existen en la base de datos). Sería demasiado costoso verificar la existencia de cada fila en la base de datos antes de insertarla, así que pretendo proceder manejando las excepciones IntegrityError lanzadas por SQLAlchemy, registrando el error y luego continuando.SQLAlchemy IntegrityError e importaciones de datos masivos
Mi código se verá algo como esto:
# establish connection to db etc.
tbl = obtain_binding_to_sqlalchemy_orm()
datarows = load_rows_to_import()
try:
conn.execute(tbl.insert(), datarows)
except IntegrityError as ie:
# eat error and keep going
except Exception as e:
# do something else
El (implícito) que estoy haciendo anterior es que no se está produciendo SQLAlchemy las inserciones múltiples en una sola transacción. Si mi suposición es incorrecta, significa que si se produce un IntegrityError, el resto de la inserción se cancela. ¿Alguien puede confirmar si el "patrón" de pseudocódigo anterior funcionará como se esperaba, o terminaré perdiendo datos como resultado de las excepciones arrojadas por IntegrityError?
Además, si alguien tiene una mejor idea de hacer esto, me interesará escucharlo.