sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué psycopg2 INSERT tarda tanto en ejecutarse en un bucle y cómo lo acelero?

Hay múltiples opciones para acelerar la inserción de datos masivos.

1.) commit() después de que termine el ciclo:

for ele in coordinates:
    cursor.execute('INSERT INTO gmaps (source_latitude, source_longitude, destination_latitude, destination_longitude) VALUES (%s, %s, %s, %s)', (ele[0], ele[1], ele[2], ele[3])))
conn.commit()

2.) Utilice los ayudantes de ejecución rápida de psycopg2 , como execute_batch() or execute_values() .

3.) Concentración de cadenas usando mogrify() :

dataText = ','.join(cur.mogrify('(%s,%s,%s,%s)', row) for ele in coordinates)
cur.execute('INSERT INTO gmaps VALUES ' + dataText)
cur.commit()

Para una comparación detallada de INSERT velocidades de ejecución echa un vistazo a esto punto de referencia.