Outils pour utilisateurs

Outils du site


dev:python:flask:flask-sqlalchemy:relation_many-to-many

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:python:flask:flask-sqlalchemy:relation_many-to-many [2025/08/05 21:26] yoanndev:python:flask:flask-sqlalchemy:relation_many-to-many [2025/08/05 22:16] (Version actuelle) yoann
Ligne 6: Ligne 6:
 :TODO: :TODO:
  
 +====== Suppression des enregistrements orphelins dans une association many-to-many =====
 +
 +Un cas typique est la gestion des étiquettes (tags) ou des mots-clés (keywords).
 +
 +
 +Dans cet exemple on souhaite pouvoir associer des mots-clés à des jeux :
 +
 +
 +  * A un jeu on peut associer **0 ou plusieurs** mots-clés ;
 +  * Un mot-clé est associé à **1 ou plusieurs** jeux ;
 +
 +On définit bien une association plusieurs-à-plusieurs mais on ne souhaite pas conserver dans notre base des mots-clés seuls. Lorsqu'un jeu est supprimé, si parmi ses mots-clés certains ne sont plus utilisés, alors on veut les supprimer également.
 +
 +Ce comportement de suppression des enregistrements orphelins est bien pris en charge par l'ORM SQLAlchemy sur des associations de type one-to-many mais sa mise en œuvre sur des associations de type many-to-many est un peu plus délicate.
 +
 +Heureusement le package Python **SQLAlchemy-Utils** permet de mettre en œuvre se comportement via sa fonction **auto_delete_orphans**.
 +
 +
 +<note>
 +Pour pouvoir utiliser la fonction ''auto_delete_orphans'' du package les associations définies via la fonction ''relationship'' doivent utiliser l'option historique **backref**
 +</note>
  
  
Ligne 17: Ligne 38:
  
   * [[https://github.com/sqlalchemy/sqlalchemy/wiki/ManyToManyOrphan|Supprimer les enregistrements orphelins d'une association many-to-many]]   * [[https://github.com/sqlalchemy/sqlalchemy/wiki/ManyToManyOrphan|Supprimer les enregistrements orphelins d'une association many-to-many]]
 +  * [[https://app.readthedocs.org/projects/sqlalchemy-utils/downloads/pdf/stable/|Documentation package SQLAlchemy-Utils (readthedocs.org)]]
   * https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy   * https://stackoverflow.com/questions/51335298/concepts-of-backref-and-back-populate-in-sqlalchemy
   * https://stackoverflow.com/questions/68355401/how-to-remove-sqlalchemy-many-to-many-orphans-from-database   * https://stackoverflow.com/questions/68355401/how-to-remove-sqlalchemy-many-to-many-orphans-from-database
 +
  
  
dev/python/flask/flask-sqlalchemy/relation_many-to-many.1754429202.txt.gz · Dernière modification : 2025/08/05 21:26 de yoann