Contents
References
- Flask-SQLAlchemy – Simple Relationships
- SQLAlchemy Docs: Relationship API
- the SQLAlchemy Docs on Relationship Loading Techniques
- SQLALchemy ORM Relationship Docs
- SQLAlchemy Docs on Defining Constraints
Define a Parent-Child Relationship
class Driver(db.Model):
__tablename__ = 'drivers'
id = db.Column(db.Integer, privary_key=True)
...
vehicles = db.relationship('Vehicle', backref='driver' , lazy=True)
class Vehicle(db.Model):
__tablename__ = 'vehicles'
id = db.Column(db.Integer, privary_key=True)
...
driver_id = db.Column(db.Integer, db.ForeignKey('drivers.id'), nullable=False)
Beachte: Die backref heisst driver, das der relevante Foreign Key jedoch driver_id!
Erklärungen
Option: | Erklärung: |
---|---|
lazy=True (default) | lazy loading |
lazy=’select‘ | eager loading |
db.ForeignKey(‚drivers.id) | 1. ACHTUNG: Tabellennamen benutzen, nicht den Entity-Namen (‚drivers.id‚, nicht ‚Driver.id‘)! 2. Datentypen von FK und dessen Ziel müssen übereinstimmen. |
Weitere relationship Konfig-Optionen: collection_class = … cascade = … See: SQLALchemy ORM Relationship Docs | Beispiele: collection_class = list cascade = ’save-update‘ # OR: all, delete-orphan |