Outils pour utilisateurs

Outils du site


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

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
dev:python:flask:flask-sqlalchemy:relation_one-to-many [2024/12/07 13:37] – créée yoanndev:python:flask:flask-sqlalchemy:relation_one-to-many [2025/08/03 10:43] (Version actuelle) yoann
Ligne 2: Ligne 2:
  
  
 +:TODO_DOCUPDATE:
  
 ====== Flask-SQLAlchemy : relation one-to-many ====== ====== Flask-SQLAlchemy : relation one-to-many ======
Ligne 14: Ligne 15:
  
   * Un magasin (Shop) vend un ou plusieurs produits (Product);   * Un magasin (Shop) vend un ou plusieurs produits (Product);
-  * Un produit est vendu par un seul magasin.+  * Un produit est stocké dans un seul magasin.
  
 ===== Implémentation ===== ===== Implémentation =====
Ligne 20: Ligne 21:
 Ci-dessous l'application Flask minimaliste implémentant les deux classes du modèle et la relation one-to-many. Ci-dessous l'application Flask minimaliste implémentant les deux classes du modèle et la relation one-to-many.
  
-<code python app.py>+<code python app.py [enable_line_numbers=“true”]>
 from flask import Flask from flask import Flask
 from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
Ligne 70: Ligne 71:
  
  
-===== Test et utlisation =====+ 
 +  * Lignes 7 et 25 : les classes doivent hériter de db.Model pour que les objets puissent être enregistrés dans la base de données; 
 +  * Pour chaque attribut, on définit un type valide pour le stockage en base de données; 
 + 
 +===== La relation one-to-many ===== 
 + 
 + 
 +==== L'option lazy="dynamic" de la méthode db.relationship ==== 
 + 
 +A la ligne 12, on peut voir que l'option **''lazy="dynamic"''** est utilisée pour définir la relation. 
 +  
 +Lorsque cette option est utilisée, l'attribut ''Shop.products'' **ne retourne plus directement la liste complète** de tous les produits désignés par la relation. Au lieu de cela, ''Shop.products'' retourne un objet de type requête : cela permet notamment de **définir des critères de sélection**. 
 + 
 + 
 +===== Test et utilisation =====
  
 Pour tester l'implémentation, on peut lancer l'application flask en mode interactif : Pour tester l'implémentation, on peut lancer l'application flask en mode interactif :
Ligne 81: Ligne 96:
 <code python> <code python>
 >>> # Afficher les références >>> # Afficher les références
 +>>> dir()
  
 >>> # Création de la base >>> # Création de la base
 +>>> db.drop_all() 
 +>>> db.create_all()
  
 >>> # Instanciation d'un magasin et de quelques produits >>> # Instanciation d'un magasin et de quelques produits
 +>>> l = Shop()
 +>>> l.name = "LouerMoi"
 +>>> db.session.add(l)
 +>>> db.session.commit()
  
 +>>> p = Product()
 +>>> p.name = "Ponceuse Botch"
 +>>> p.price = 59.90
 +>>> 
 +>>> t = Product()
 +>>> t.name = "Tronconeuse Botch"
 +>>> t.price = 169.99
 +>>> 
 +>>> l.add_product(p)
 +>>> l.add_product(t)
  
 +>>> # Récupère tous les produits du magasin
 +>>> l.products.all()
  
->>> # Ne récupérer que les produits dont le prix est supérieur à 30€ +>>> # Ne récupérer que les produits dont le prix est supérieur à 60€ 
->>> rqt.filter(Product.price>30.0).all()+>>> l.products.filter(Product.price > 60.0).all()
  
 >>> # Utilisation de la fonction LIKE >>> # Utilisation de la fonction LIKE
->>> rqt.filter(Product.name.like('%Ri%')).all()+>>> l.products.filter(Product.name.like('%pon%')).all()
 </code> </code>
  
Ligne 100: Ligne 132:
  
   * [[https://pratapsharma.io/flask-sql-alchemy-one-to-many-relationship/|Mise en oeuvre d'une relation one-to-many avec Flask-SQLAlchemy]]    * [[https://pratapsharma.io/flask-sql-alchemy-one-to-many-relationship/|Mise en oeuvre d'une relation one-to-many avec Flask-SQLAlchemy]] 
 +  * [[https://www.digitalocean.com/community/tutorials/how-to-use-one-to-many-database-relationships-with-flask-sqlalchemy|La relation one-to-many avec Flask-SQLAlchemy (digitalocean.com)]]
 +  * https://www.geeksforgeeks.org/python/sqlalchemy-cascading-deletes/
 +  * [[https://www.peterspython.com/fr/blog/sqlalchemy-utilisation-de-cascade-deletes-pour-supprimer-des-objets-connexes|Cascader la suppression des objets enfants (peterspython.com)]]
dev/python/flask/flask-sqlalchemy/relation_one-to-many.1733578678.txt.gz · Dernière modification : 2024/12/07 13:37 de yoann