Start here. This is the direct spoken answer to practice first.
Overview
A partial update needs to preserve the difference between 'leave it alone' and 'clear it.'
I use a dedicated update model whose fields represent only values the operation may change. Pydantic's model_fields_set records which fields the client explicitly supplied, and model_dump(exclude_unset=True) can produce that subset. An omitted field means leave the stored value unchanged; a supplied null means clear it only when the contract allows null. A defaulted value is different again, because it may appear on the model even though the client did not send it.