Tengo una tabla de base de datos con un campo de cadena único y un par de campos enteros. El campo de cadena suele tener entre 10 y 100 caracteres.Cuál es la forma más eficiente de insertar miles de registros en una tabla (MySQL, Python, Django)
Una vez cada minuto más o menos tengo la siguiente situación: recibo una lista de 2-10 mil tuplas correspondientes a la estructura de registro de la tabla, p.
[("hello", 3, 4), ("cat", 5, 3), ...]
tengo que insertar todas estas tuplas de la tabla (se supone He verificado ninguna de estas cadenas aparecen en la base de datos). Para aclarar, estoy usando InnoDB, y tengo una clave primaria autoincremental para esta tabla, la cadena no es PK.
Mi código actualmente itera a través de esta lista, para cada tupla crea un objeto de módulo de Python con los valores apropiados, y llama ".save()", algo así:
@transaction.commit_on_success
def save_data_elements(input_list):
for (s, i1, i2) in input_list:
entry = DataElement(string=s, number1=i1, number2=i2)
entry.save()
Este código es actualmente uno de los cuellos de botella de rendimiento en mi sistema, entonces estoy buscando formas de optimizarlo.
Por ejemplo, podría generar códigos SQL que contengan cada uno un comando INSERT para 100 tuplas ("codificadas" en el SQL) y ejecutarlo, pero no sé si mejorará algo.
¿Tiene alguna sugerencia para optimizar dicho proceso?
Gracias
¡Buena pregunta! Entonces, ¿las mejores respuestas parecen ser la creación de un archivo de texto o la generación de una consulta SQL a través de la concatenación de cadenas? Esto es un poco insatisfactorio – JAL