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/03 19:53] yoanndev:python:flask:flask-sqlalchemy:relation_many-to-many [2025/08/05 22:16] (Version actuelle) yoann
Ligne 5: Ligne 5:
  
 :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 12: Ligne 34:
   * [[https://docs.sqlalchemy.org/en/20/orm/cascades.html#cascade-delete-many-to-many|Utiliser la suppression en cascade sur une relation many-to-many (sqlalchemy.org)]]   * [[https://docs.sqlalchemy.org/en/20/orm/cascades.html#cascade-delete-many-to-many|Utiliser la suppression en cascade sur une relation many-to-many (sqlalchemy.org)]]
   * https://stackoverflow.com/questions/26948397/how-to-delete-records-from-many-to-many-secondary-table-in-sqlalchemy   * https://stackoverflow.com/questions/26948397/how-to-delete-records-from-many-to-many-secondary-table-in-sqlalchemy
 +
 +==== Supprimer les enregistrements orphelins ====
 +
 +  * [[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/68355401/how-to-remove-sqlalchemy-many-to-many-orphans-from-database
 +
 +
 +
dev/python/flask/flask-sqlalchemy/relation_many-to-many.1754250832.txt.gz · Dernière modification : 2025/08/03 19:53 de yoann