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.

bulk_update.png
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:

Otros Posts


Convertir Instancia de un Modelo de Django a un Diccionario
12 de Febrero de 2022 • Oliver Sandoval
Diferentes formas de convertir una instancia de un Modelo de Django a un Diccionario
Leer mas »
Configurar Multiples Bases de Datos con Django
21 de Octubre de 2021 • Oliver Sandoval
Multiples Bases de Datos con Django
Leer mas »
Autenticación en Django Rest Framework
4 de Septiembre de 2021 • Oliver Sandoval
Autenticacion en Django Rest Framework
Leer mas »