﻿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
33579	Raise a specialized exception when Model.save(update_fields) does not affect any rows	Simon Charette	nobody	"When `Model.save(update_fields)` is used to update an instance of a previously fetched model and the resulting `UPDATE` doesn't affect any row a `DatabaseError` [https://github.com/django/django/blob/3b3f38b3b09b0f2373e51406ecb8c9c45d36aebc/django/db/models/base.py#L1000 is raised].

Since the resulting exception cannot be differentiated by its `type` from any other dababase errors occuring during `save` (e.g. a failed `UPDATE` also results in a `DatabaseError`) the only pattern to gracefully handle this rare edge case to catch all `DatabaseError` and compare its `.args[0]` (or `str` representation) to a string that doesn't offer any stability guarantees. 

In order to make it easier for advanced users that rely on the `update_fields` feature to handle this case differently from others where a `DatabaseError` is raised I propose that that we introduce a new `DatabaseError` subclass that would be raised instead when an unexpected empty update occurs.

I believe [https://github.com/django/django/blob/3b3f38b3b09b0f2373e51406ecb8c9c45d36aebc/django/db/models/base.py#L997-L1000 both instances] should be switched to this pattern (`force_update` and `update_fields`)."	New feature	new	Database layer (models, ORM)	4.0	Normal				Unreviewed	0	0	0	0	0	0
