# Corps - Mises à jour { #body-updates } ## Mettre à jour en remplaçant avec `PUT` { #update-replacing-with-put } Pour mettre à jour un élément, vous pouvez utiliser l’opération [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT). Vous pouvez utiliser le `jsonable_encoder` pour convertir les données d’entrée en données pouvant être stockées au format JSON (par exemple, avec une base de données NoSQL). Par exemple, convertir `datetime` en `str`. {* ../../docs_src/body_updates/tutorial001_py310.py hl[28:33] *} On utilise `PUT` pour recevoir des données qui doivent remplacer les données existantes. ### Avertissement concernant le remplacement { #warning-about-replacing } Cela signifie que si vous souhaitez mettre à jour l’élément `bar` avec `PUT` et un corps contenant : ```Python { "name": "Barz", "price": 3, "description": None, } ``` comme il n’inclut pas l’attribut déjà enregistré « tax »: 20.2, le modèle d’entrée prendrait la valeur par défaut « tax »: 10.5. Et les données seraient enregistrées avec cette « nouvelle » « tax » de 10.5. ## Effectuer des mises à jour partielles avec `PATCH` { #partial-updates-with-patch } Vous pouvez également utiliser l’opération [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) pour mettre à jour des données de manière partielle. Cela signifie que vous pouvez n’envoyer que les données que vous souhaitez mettre à jour, en laissant le reste intact. /// note | Remarque `PATCH` est moins utilisé et moins connu que `PUT`. Et de nombreuses équipes n’utilisent que `PUT`, même pour les mises à jour partielles. Vous êtes libre de les utiliser comme vous le souhaitez, **FastAPI** n’impose aucune restriction. Mais ce guide vous montre, plus ou moins, la façon dont ils sont censés être utilisés. /// ### Utiliser le paramètre `exclude_unset` de Pydantic { #using-pydantics-exclude-unset-parameter } Si vous souhaitez recevoir des mises à jour partielles, il est très utile d’utiliser le paramètre `exclude_unset` dans la méthode `.model_dump()` du modèle Pydantic. Comme `item.model_dump(exclude_unset=True)`. Cela génère un `dict` ne contenant que les données définies lors de la création du modèle `item`, en excluant les valeurs par défaut. Vous pouvez ensuite l’utiliser pour produire un `dict` avec uniquement les données définies (envoyées dans la requête), en omettant les valeurs par défaut : {* ../../docs_src/body_updates/tutorial002_py310.py hl[32] *} ### Utiliser le paramètre `update` de Pydantic { #using-pydantics-update-parameter } Vous pouvez maintenant créer une copie du modèle existant avec `.model_copy()`, et passer le paramètre `update` avec un `dict` contenant les données à mettre à jour. Comme `stored_item_model.model_copy(update=update_data)` : {* ../../docs_src/body_updates/tutorial002_py310.py hl[33] *} ### Récapitulatif des mises à jour partielles { #partial-updates-recap } En résumé, pour appliquer des mises à jour partielles, vous procédez ainsi : * (Optionnel) utilisez `PATCH` au lieu de `PUT`. * Récupérez les données stockées. * Placez ces données dans un modèle Pydantic. * Générez un `dict` sans valeurs par défaut à partir du modèle d’entrée (en utilisant `exclude_unset`). * De cette façon, vous mettez à jour uniquement les valeurs effectivement définies par l’utilisateur, au lieu d’écraser des valeurs déjà stockées par des valeurs par défaut de votre modèle. * Créez une copie du modèle stocké, en mettant à jour ses attributs avec les mises à jour partielles reçues (en utilisant le paramètre `update`). * Convertissez le modèle copié en quelque chose qui peut être stocké dans votre base de données (par exemple en utilisant le `jsonable_encoder`). * Cela est comparable à l’utilisation à nouveau de la méthode `.model_dump()` du modèle, mais cela vérifie (et convertit) les valeurs vers des types pouvant être convertis en JSON, par exemple `datetime` en `str`. * Enregistrez les données dans votre base de données. * Retournez le modèle mis à jour. {* ../../docs_src/body_updates/tutorial002_py310.py hl[28:35] *} /// tip | Astuce Vous pouvez en réalité utiliser cette même technique avec une opération HTTP `PUT`. Mais l’exemple ici utilise `PATCH` car il a été créé pour ces cas d’usage. /// /// note | Remarque Remarquez que le modèle d’entrée est toujours validé. Ainsi, si vous souhaitez recevoir des mises à jour partielles pouvant omettre tous les attributs, vous devez disposer d’un modèle avec tous les attributs marqués comme optionnels (avec des valeurs par défaut ou `None`). Pour distinguer les modèles avec toutes les valeurs optionnelles pour les mises à jour et les modèles avec des valeurs requises pour la création, vous pouvez utiliser les idées décrites dans [Modèles supplémentaires](extra-models.md). ///