﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29037	Add a bulk_update method to models	Tom Forbes	nobody	"Currently it's not easily or neatly possible to update multiple rows with differing values using the ORM. Most people who need to update a number of models with a value that's distinct to each model need to issue N queries. This is akin to the situation that lead to the addition of bulk_create.

Updating multiple rows with differing values in a single query is indeed possible in SQL, and Postgres has some specific syntax for it[1]. Other databases can use a CASE/WHEN:

{{{#!python
SomeModel.object.filter(id__in=[1,2]).update(
    some_field=Case(
        When(id=1, then=Value('Field value for ID=1')),
        When(id=2, then=Value('Field value for ID=2'))
    )
)
}}}

This isn't particularly elegant and cannot take advantage of specific DB features (like pg UPDATE FROM), and batching is hard. An API similar to bulk_create would be nice:

{{{#!python
SomeModel.objects.bulk_update(list_of_models, batch_size=100, fields=['some_field'])
}}}

There is some prior art in the django-bulk-update package[2], which has some impressive performance numbers in it's readme.

1. https://stackoverflow.com/questions/18797608/update-multiple-rows-in-same-query-using-postgresql

2. https://github.com/aykut/django-bulk-update"	New feature	closed	Database layer (models, ORM)	dev	Normal	duplicate			Unreviewed	1	0	0	0	0	0
