Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

183
Visualizações
Actualización masiva de un campo de modelo basado en una condición de los otros campos de modelo

Tengo un modelo de 5 columnas con más de 10 000 líneas de datos. Ahora quiero actualizar una columna de todas las líneas en función de otros valores de columna.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

En mi opinión, para su escenario "Quiero actualizar una columna de todas las líneas en función de los valores de otras columnas". , la mejor opción es usar la actualización condicional

Supongamos este modelo:

 class Person(models.Model): f1 = models.IntegerField() f2 = models.IntegerField() f3 = models.IntegerField() f4 = models.IntegerField()

Puedes actualizarlo de esta manera:

 rom django.db.models import F, When, Case new_value = Case( When(f1__gte=F('f2'), then=F('f1')), default=F('f2') ) Person.objects.update(f3=new_value)

Esto plantea una simple declaración de SQL de actualización:

 >>> import logging >>> l = logging.getLogger('django.db.backends') >>> l.setLevel(logging.DEBUG) >>> l.addHandler(logging.StreamHandler()) >>> Person.objects.update(f3=c) (0.000) UPDATE "tt_person" SET "f3" = CASE WHEN ("tt_person"."f1" >= "tt_person"."f2") THEN "tt_person"."f1" ELSE "tt_person"."f2" END; args=() 0
over 4 years ago · Santiago Trujillo Relatório

0

La función django lista para usar para realizar actualizaciones masivas es bulk_update() . Aquí un ejemplo:

 myModel = MyModel.objects.all() for l in myModel: if c1=='ChkVal1' and c2 < c3: c4='Value 1' elif c1=='ChkVal2' and c2 b> c3: c4='Value 2' else c4='Value 3' MyModel.objects.bulk_update(myModel, update_fields = ['c4'])

Recuerde, citando documentos:

  • No puede actualizar la clave principal del modelo.
  • No se llama al método save() de cada modelo y no se envían las señales pre_save y post_save.
  • Si actualiza una gran cantidad de columnas en una gran cantidad de filas, el SQL generado puede ser muy grande. Evite esto especificando un tamaño de lote adecuado.
  • La actualización de campos definidos en ancestros de herencia de varias tablas incurrirá en una consulta adicional por ancestro.
  • Cuando un lote individual contiene duplicados, solo la primera instancia de ese lote generará una actualización.
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda