Outils pour utilisateurs

Outils du site


dev:python:flask:flask-sqlalchemy:relation_agregation

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_agregation [2025/07/22 15:23] yoanndev:python:flask:flask-sqlalchemy:relation_agregation [2025/07/22 15:31] (Version actuelle) yoann
Ligne 1: Ligne 1:
 {{tag>dev python sql sqlalchemy relation}} {{tag>dev python sql sqlalchemy relation}}
  
-:TODO_DOCUPDATE: 
  
 ====== Flask-SQLAlchemy : Définir une relation d'agrégation ====== ====== Flask-SQLAlchemy : Définir une relation d'agrégation ======
Ligne 32: Ligne 31:
 Ci-dessous une application minimale Flask mettant en œuvre le modèle de données. Ci-dessous une application minimale Flask mettant en œuvre le modèle de données.
  
-<code python [enable_line_numbers="true", highlight_lines_extra="12,21"]>+<code python app.py [enable_line_numbers="true", highlight_lines_extra="19,20"]>
 from flask import Flask from flask import Flask
 from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
 + 
 db = SQLAlchemy() db = SQLAlchemy()
- +  
 + 
 class Warehouse(db.Model): class Warehouse(db.Model):
     __tablename__ = 'warehouse'     __tablename__ = 'warehouse'
     id = db.Column(db.Integer, primary_key=True, index=True)     id = db.Column(db.Integer, primary_key=True, index=True)
     name = db.Column(db.String(80), unique=True, index=True)     name = db.Column(db.String(80), unique=True, index=True)
-    # Association one-to-many + 
-    packets = db.relationship("Packet", backref="warehouse"+
- +
  
 + 
 class Packet(db.Model): class Packet(db.Model):
     __tablename__ = 'packet'     __tablename__ = 'packet'
Ligne 54: Ligne 51:
     recipient = db.Column(db.String(80))     recipient = db.Column(db.String(80))
     warehouse_id = db.Column(db.Integer, db.ForeignKey('warehouse.id'), unique=False, nullable=True)     warehouse_id = db.Column(db.Integer, db.ForeignKey('warehouse.id'), unique=False, nullable=True)
 +    warehouse = db.relationship("Warehouse", backref="packets"
 + 
  
 app = Flask(__name__) app = Flask(__name__)
 + 
 # Le chemin vers la base SQLite est relatif au dossier de l'application flask # Le chemin vers la base SQLite est relatif au dossier de l'application flask
 app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db"
- +  
-# Initialiser l'application Flask par l'intermédiaire de l'extension Flask-SQLAlchemy+# Initialiser l'application Flask par l'intermédiaire de l'extension
 db.init_app(app) db.init_app(app)
 +
 </code> </code>
  
 Deux point importants à relever : Deux point importants à relever :
-  * À la ligne 21 on **définit la clé étrangère** avec l'option **''nullable=True''** cela permet au SGDB de remplacer la clé primaire de l’entrepôt par la valeur null lorsque l'entrepôt lié est supprimé. +  * À la ligne 19 on **définit la clé étrangère** avec l'option **''nullable=True''** cela permet au SGDB de remplacer la clé primaire de l’entrepôt par la valeur null lorsque l'entrepôt lié est supprimé. 
-  * À la ligne 12 on définit l'association entre Warehouse et Packet : le premier argument permet de spécifier le nom de la classe liée et le second permet de définir l'attribut de rappel ainsi ''Packet.warehouse'' permettra de retrouver l’entrepôt lié au colis par cette association.+  * À la ligne 20 on définit l'association entre Warehouse et Packet : le premier argument permet de spécifier le nom de la classe liée et le second permet de définir l'attribut de rappel ainsi ''Packet.warehouse'' permettra de retrouver l’entrepôt lié au colis par cette association.
  
  
dev/python/flask/flask-sqlalchemy/relation_agregation.1753197783.txt.gz · Dernière modification : 2025/07/22 15:23 de yoann