Bird
Raised Fist0
Flaskframework~20 mins

Relationships (one-to-many) in Flask - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
One-to-Many Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this Flask-SQLAlchemy one-to-many relationship query?
Given the models Author and Book with a one-to-many relationship, what will be printed by the following code?
Flask
author = Author.query.filter_by(name='Alice').first()
print(len(author.books))
AThe number of books written by Alice
BThe total number of authors in the database
CThe total number of books in the database
DRaises AttributeError because 'books' is not defined
Attempts:
2 left
💡 Hint
Remember that 'books' is the related collection for the one-to-many relationship from Author to Book.
📝 Syntax
intermediate
2:00remaining
Which option correctly defines a one-to-many relationship in Flask-SQLAlchemy?
Choose the correct way to define a one-to-many relationship between Author and Book models.
A
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    books = db.relationship('Book', backref='author')

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
B
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('book.id'))

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    books = db.relationship('Author', backref='book')
C
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    books = db.relationship('Book', foreign_keys='author.id')

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
D
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    books = db.relationship('Book')

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer)
Attempts:
2 left
💡 Hint
The foreign key should be on the 'many' side, and the relationship on the 'one' side.
🔧 Debug
advanced
2:00remaining
Why does accessing author.books raise an error in this code?
Given these models, why does the code 'author = Author.query.first(); print(author.books)' raise an AttributeError?
Flask
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
ABecause the backref name is incorrect in the Book model
BBecause the foreign key is missing on the Book model
CBecause the Author model lacks a relationship() definition for 'books'
DBecause the primary key is missing on the Author model
Attempts:
2 left
💡 Hint
Check if the Author model knows about its related books.
❓ state_output
advanced
2:00remaining
What is the value of book.author.name after this code runs?
Given these models and data, what will 'print(book.author.name)' output?
Flask
author = Author(name='Bob')
db.session.add(author)
db.session.commit()

book = Book(title='Flask Guide', author_id=author.id)
db.session.add(book)
db.session.commit()

book = Book.query.first()
print(book.author.name)
AFlask Guide
BRaises AttributeError
CNone
DBob
Attempts:
2 left
💡 Hint
The 'author' attribute on Book is set by the backref from the relationship.
🧠 Conceptual
expert
2:00remaining
Which statement best describes the behavior of lazy='dynamic' in a one-to-many relationship?
In Flask-SQLAlchemy, what does setting lazy='dynamic' on a one-to-many relationship do?
AIt loads all related items immediately when the parent is queried
BIt returns a query object instead of a list, allowing further filtering before loading related items
CIt disables loading of related items entirely
DIt caches the related items permanently after the first access
Attempts:
2 left
💡 Hint
Think about how you can chain filters on the related collection.

Practice

(1/5)
1. What does a one-to-many relationship in Flask SQLAlchemy represent?
easy
A. One record in a table is linked to many records in another table
B. Many records in a table are linked to one record in another table
C. Two tables have the same number of records
D. One record is linked to exactly one record in another table

Solution

  1. Step 1: Understand the meaning of one-to-many

    One-to-many means one item in the first table relates to multiple items in the second table.
  2. Step 2: Match the description to options

    One record in a table is linked to many records in another table correctly describes this relationship as one record linked to many records.
  3. Final Answer:

    One record in a table is linked to many records in another table -> Option A
  4. Quick Check:

    One-to-many = One record linked to many [OK]
Hint: One-to-many means one item connects to many items [OK]
Common Mistakes:
  • Confusing one-to-many with many-to-one
  • Thinking it means equal number of records
  • Assuming one-to-many means one-to-one
2. Which of the following is the correct way to define a one-to-many relationship in Flask SQLAlchemy models?
easy
A. Both B and C together
B. child_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
C. parent = db.relationship('Child', backref='parent', lazy=True)
D. db.relationship('Parent', foreign_key='child.id')

Solution

  1. Step 1: Identify relationship and foreign key usage

    In Flask SQLAlchemy, one-to-many needs a relationship on the parent and a foreign key on the child.
  2. Step 2: Check options for correct syntax

    parent = db.relationship('Child', backref='parent', lazy=True) shows the relationship on the parent, child_id = db.Column(db.Integer, db.ForeignKey('parent.id')) shows the foreign key on the child. Both are needed together.
  3. Final Answer:

    Both B and C together -> Option A
  4. Quick Check:

    Relationship + ForeignKey = Correct one-to-many [OK]
Hint: Use relationship on parent and ForeignKey on child [OK]
Common Mistakes:
  • Defining only relationship without foreign key
  • Using wrong foreign key syntax
  • Confusing parent and child roles
3. Given these models, what will author.books return?
class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    books = db.relationship('Book', backref='author')

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))

# Assume author is an Author instance with 3 related Book records
medium
A. A single Book object
B. A list of Book objects related to the author
C. An integer count of books
D. null, because books is not defined

Solution

  1. Step 1: Understand db.relationship returns

    The relationship attribute returns a list-like collection of related objects in one-to-many.
  2. Step 2: Apply to author.books

    Since author.books is a relationship to Book, it returns a list of Book objects linked to that author.
  3. Final Answer:

    A list of Book objects related to the author -> Option B
  4. Quick Check:

    Relationship attribute returns list of related objects [OK]
Hint: Relationship attribute returns list of related items [OK]
Common Mistakes:
  • Expecting a single object instead of a list
  • Thinking it returns count instead of objects
  • Assuming attribute is undefined
4. Identify the error in this Flask SQLAlchemy one-to-many setup:
class Parent(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    children = db.relationship('Child')

class Child(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer)
medium
A. children should be a db.Column, not relationship
B. Relationship should be on Child, not Parent
C. Missing ForeignKey on Child's parent_id column
D. Parent model missing primary key

Solution

  1. Step 1: Check Child model's parent_id column

    It lacks the ForeignKey constraint linking to Parent's id.
  2. Step 2: Understand relationship requires ForeignKey

    Without ForeignKey, SQLAlchemy cannot link Child to Parent properly.
  3. Final Answer:

    Missing ForeignKey on Child's parent_id column -> Option C
  4. Quick Check:

    ForeignKey needed on child foreign key column [OK]
Hint: ForeignKey must be on child foreign key column [OK]
Common Mistakes:
  • Forgetting ForeignKey on child side
  • Placing relationship on wrong model
  • Confusing relationship with column
5. You want to query all books written by an author named 'Alice' using Flask SQLAlchemy with one-to-many models Author and Book. Which code snippet correctly achieves this?
hard
A. author = Author.query.filter_by(name='Alice').all()\nbooks = author.books if author else []
B. books = Book.query.filter(author.name == 'Alice').all()
C. books = Book.query.filter_by(author='Alice').all()
D. books = Book.query.join(Author).filter(Author.name == 'Alice').all()

Solution

  1. Step 1: Understand querying with relationships

    To filter books by author name, join Book with Author and filter by Author.name.
  2. Step 2: Analyze options for correct query

    books = Book.query.join(Author).filter(Author.name == 'Alice').all() uses join and filter correctly to get all books by 'Alice'. author = Author.query.filter_by(name='Alice').all()\nbooks = author.books if author else [] accesses .books on list of authors (from .all()). books = Book.query.filter(author.name == 'Alice').all() uses invalid reference to 'author'. books = Book.query.filter_by(author='Alice').all() filters by author string incorrectly.
  3. Final Answer:

    books = Book.query.join(Author).filter(Author.name == 'Alice').all() -> Option D
  4. Quick Check:

    Use join and filter on related model for correct query [OK]
Hint: Use join and filter on related model for queries [OK]
Common Mistakes:
  • Using .all() instead of .first() when accessing instance relationship
  • Referencing related model without qualifier in filter
  • Not joining tables before filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard