Mutation means change.

Mutation Tracking means ability to detect the change.

The term seemed very complex (to me) at first. But it isn't.

SQLAlchemy ORM depends on the ability to detect the change in the object so that it can commit it to the DB on session.commit()

It is important to understand that if the change is not detected, calling session.commit() won't help. (I think) It internally checks to see if anything is changed. If not, it is (equivalent of) a no-op.

This becomes very important, if you come across bugs like "why is my JSON field changes not reflected in the DB".

For simple data types, the change detection is built-in. But for data types like ARRAY or JSON which contain a lot of data within themselves, such a tracking is not built-in.

If you want the ORM to detect such changes, you will to tell it. The changed (and other) events must be propagated manually.

In case of JSON, one can use MutableDict to do that. For ARRAY look at this .

Read the official SQLAlchemy documentation about Mutation Tracking here.