es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Haciendo un chunking en django-import-export

Estoy leyendo este artículo sobre cómo dividir en porciones una operación en una base de datos grande. También estoy usando django-import-export y django-import-export-celery en mi sitio de administración y me gustaría integrar la división en porciones en ellos.

El problema que tengo es que django-import-export ya maneja la importación de archivos, así como todo el proceso de importación, en segundo plano.

He intentado usar las importaciones en masa de django-import-export, pero una de las advertencias es:

Las operaciones en masa no funcionan con relaciones de muchos a muchos.

Entonces, pensamos que la división en porciones es la alternativa. ¿Es posible realizar la división en porciones dentro de django-import-export?

ACTUALIZACIÓN – MODELO AGREGADO:

class Profile(models.Model):
    firstname = models.CharField(max_length=200)
    lastname = models.CharField(max_length=200, blank=True, null=True)
    email = models.EmailField(max_length=200)
    associated_issuer = models.ManyToManyField('app.Issuer', related_name='add_issuer', blank=True)
    associated_profile = models.ManyToManyField('app.Profile', related_name='add_profile', blank=True)

class Issuer(models.Model):
    # información personal
    name = models.CharField(max_length=200, blank=True, null=True)
    contact_email = models.EmailField(max_length=200, blank=True, null=True)
    associated_profile = models.ManyToManyField('app.Profile', related_name='add_profile_2', blank=True)
    associated_issuer = models.ManyToManyField('app.Issuer', related_name='add_issuer_2', blank=True)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Dado que django-import-export ya maneja la importación de archivos y todo el proceso de importación en segundo plano, integrar el “chunking” en él puede no ser sencillo. Una posible solución es utilizar la funcionalidad de importación masiva de django-import-export y luego realizar la operación de “chunking” en los datos resultantes antes de guardarlos en la base de datos. Sin embargo, como se menciona en el artículo, la importación masiva no admite relaciones muchos a muchos, por lo que esta podría no ser una solución ideal si tus modelos tienen relaciones muchos a muchos.

    Otra posible solución podría ser modificar la tarea de django-import-export-celery para incluir el “chunking”. La tarea podría modificarse para leer un “chunk” de datos del archivo, realizar las operaciones requeridas y luego repetir el proceso hasta que se hayan procesado todos los datos. Esto requeriría algunos cambios en el código de django-import-export-celery y debería implementarse con cuidado.

    En general, aunque es posible integrar el “chunking” en django-import-export, requeriría cierto esfuerzo y puede que no sea sencillo. Podría ser más fácil utilizar otras herramientas o bibliotecas que admitan el “chunking” de forma nativa.

Comments are closed.