One-to-Many Relationships
A one-to-many relationship means:
- one parent row relates to many child rows
Example:
- one
UserUserhas manyPostPosts
Models
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
posts = db.relationship("Post", back_populates="author", lazy=True)
class Post(db.Model):
__tablename__ = "posts"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
author = db.relationship("User", back_populates="posts")class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
posts = db.relationship("Post", back_populates="author", lazy=True)
class Post(db.Model):
__tablename__ = "posts"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
author = db.relationship("User", back_populates="posts")How to use it
user = User.query.first()
for post in user.posts:
print(post.title)user = User.query.first()
for post in user.posts:
print(post.title)lazy loading
lazy=Truelazy=Truemeans posts are loaded when accessed
Be careful in loops (can cause N+1 queries).
You can optimize with eager loading later.
If this helped you, consider buying me a coffee ☕
Buy me a coffeeWas this page helpful?
Let us know how we did
