PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi psycopg2 INSERT prend-il tant de temps à s'exécuter en boucle et comment puis-je l'accélérer?

Il existe plusieurs options pour accélérer l'insertion de données en masse.

1.) commit() une fois la boucle terminée :

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.) Utilisez les aides à l'exécution rapide de psycopg2 , comme execute_batch() or execute_values() .

3.) Concentration de chaîne en utilisant mogrify() :

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

Pour une comparaison détaillée de INSERT les vitesses d'exécution jetez un oeil à ceci référence.