Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
Optimización de la actualización masiva con SQLAlchemy

Tengo problemas con un cuello de botella de rendimiento al intentar actualizar muchos registros en dos tablas a la vez. Actualmente, tengo algunos Pandas DataFrames ( new_records_df y modified_records_df ) que contienen los registros que me gustaría insertar/actualizar. Ver el siguiente pseudocódigo:

 if not new_records_df.empty: new_recs_data = new_records_df.T.to_dict().values() # creates a list of dictionaries from the DataFrame new_recs = [] for r in new_recs_data: new_rec = {'foo_id': foo_id, 'bar': bar} new_recs.append(new_rec) db_session.bulk_insert_mappings(Record, new_recs, return_defaults=True) # return_defaults inserts the id of the inserted record into the dictionary object new_related_recs = [] for nr in new_recs: new_related_rec = {'rec_id': nr['id'], 'baz': baz} new_related_recs.append(new_rec) db_session.bulk_insert_mappings(RelatedRec, new_related_recs) if not modified_records_df.empty: modified_rec_data = modified_records_df.T.to_dict().values() # again, converting teh DataFrame to a list of dicts modified_recs = [] for m in modified_rec_data: modified_rec = {'id': m['id'], 'zab': zab} modified_recs.append(modified_rec) db_session.bulk_update_mappings(RelatedRec, modified_recs) # when a record is modified, only the RelatedRec object is updated. The Record object already exists and stays unmodified

el problema es que con ~8k registros, el bucle sobre los diccionarios toma ~20 segundos, mientras que la inserción/actualización real de la base de datos solo toma alrededor de 4 segundos. Esperaba que hubiera una forma inteligente de eliminar el bucle for , ya que este parece ser el cuello de botella. Mi base de datos es postgres y mi controlador es psycoppg2 2.6.2

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda