Cuando realizamos una Creación o Edición de datos con el ORM de Django, por lo general utilizamos o un .save o .create o .update dependiendo cual sea el caso, sin embargo, cuando tenemos un listado de instancias nuevas para crear o editar, existen varias alternativas para realizar este proceso, ya que lo comúnmente utilizado no es lo más óptimo debido a que toma demasiado tiempo realizarse.
Analicemos caso por caso.
BULK CREATE
Cuando tenemos un conjunto de instancias nuevas a registrar normalmente pensamos en utilizar Instancias para cada una de ellas y registrarlas ni bien son creadas, pero esta forma no es la mas optima debido a que demora mucho tiempo realizarse, el motivo es que ejecuta funciones adicionales tanto antes como después de que se va a realizar la creación.
Sin embargo para este tipo de situaciones podemos utilizar bulk_create() el cual es un método del ORM de Django especializado y creado con la única finalidad de ejecutar las creaciones en la Base de Datos de forma mucho mas rápida, sin necesidad de llamar a todas esas funciones extra que ejecuta instancia.save() tanto antes del guardado como después del mismo.
Hay que aclarar que cuando realizamos un bulk_create() debemos enviarle como parámetro un LISTADO DE INSTANCIAS de un MODELO a registrar. En el siguiente ejemplo vemos mejor su implementación y resultados.
Como se ve en los comentario del código, tenemos estas 3 formas de realizar varios registros, siendo ganadora la opción con BULK CREATE ya que obtuvo el menor tiempo de ejecución.
Nombre | Tiempo | Unidad |
---|---|---|
Método 1 | 0.0236 | segundos |
Método 2 | 0.0225 | segundos |
Bulk create | 0.0030 | segundos |
BULK UPDATE
Al igual que BULK CREATE, BULK UPDATE permite realizar actualizaciones masivas a un listado de instancias de un Modelo en específico, su ejecución es mucha más rápida que cualquier otro método dentro del ORM de Django.
Aquí un ejemplo de su implementación y resultados.
Se utilizará el mismo modelo que se utilizó para BULK CREATE.
Nombre | Tiempo | Unidad |
---|---|---|
Método 1 | 1.4516 | segundos |
Método 2 | 1.2630 | segundos |
Bulk update | 0.0784 | segundos |
Podemos observar que BULK UPDATE gana por mucha diferencia en la ejecución, por lo tanto es la forma más óptima de realizar este procedimiento con el ORM de Django.
Aclaraciones
Debemos tener en cuenta que tanto BULK CREATE y BULK UPDATE no ejecutarán SIGNALS para poder agilizar el procedimiento, este es un punto clave en su ejecución, además que llaman directamente a la Base de Datos utilizando el Manager del Modelo en cuestión, de esta forma es como logran tener tiempos de ejecución mas reducidos.
Aquí te dejo 2 vídeos donde se explican mas a detalle: