Bird
Raised Fist0
Flaskframework~20 mins

Model definition in Flask - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Flask Model Master
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 model query?
Given the model and query below, what will be printed?
Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)

# Assume the database has these users:
# User(id=1, username='alice')
# User(id=2, username='bob')

users = User.query.filter_by(username='alice').all()
print(len(users))
A1
B0
C2
DRaises an AttributeError
Attempts:
2 left
💡 Hint
filter_by returns a list of matching records.
📝 Syntax
intermediate
2:00remaining
Which model definition will cause a syntax error?
Identify the option that will cause a syntax error when defining a Flask-SQLAlchemy model.
A
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
B
)eslaF=elballun ,)001(gnirtS.bd(nmuloC.bd = eman    
)eurT=yek_yramirp ,regetnI.bd(nmuloC.bd = di    
:)ledoM.bd(tcudorP ssalc
C
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
D
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=True)
Attempts:
2 left
💡 Hint
Check for missing commas between arguments.
❓ state_output
advanced
2:00remaining
What is the value of user.email after this code runs?
Consider this model and code snippet. What will be the value of user.email after execution?
Flask
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)

user = User(email='test@example.com')
user.email = 'new@example.com'
user.email
A'new@example.com'
BRaises an AttributeError
CNone
D'test@example.com'
Attempts:
2 left
💡 Hint
Assigning a new value to an attribute updates it.
🔧 Debug
advanced
2:00remaining
Why does this model raise an error when creating the table?
This model raises an error when running db.create_all(). What is the cause?
Flask
class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    total = db.Column(db.Float, nullable=False)
    total = db.Column(db.String(50))
AMissing primary key causes the error.
BDuplicate column name 'total' causes a conflict.
Cdb.Float is not a valid column type.
DNullable=False is required for all columns.
Attempts:
2 left
💡 Hint
Check if any column names are repeated.
🧠 Conceptual
expert
3:00remaining
Which option correctly defines a one-to-many relationship in Flask-SQLAlchemy?
Select the option that correctly sets up 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.Column(db.Integer, db.ForeignKey('book.id'))

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
B
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)
C
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)
D
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'))
Attempts:
2 left
💡 Hint
One-to-many uses relationship on the 'one' side and ForeignKey on the 'many' side.

Practice

(1/5)
1. What is the main purpose of defining a model in a Flask application?
easy
A. To represent and manage data structure in the database
B. To create the user interface layout
C. To handle HTTP requests and responses
D. To style the web pages with CSS

Solution

  1. Step 1: Understand what a model represents

    A model in Flask defines how data is stored and structured in the database.
  2. Step 2: Identify the role of models in the app

    Models help manage data easily by mapping Python classes to database tables.
  3. Final Answer:

    To represent and manage data structure in the database -> Option A
  4. Quick Check:

    Model = Data structure representation [OK]
Hint: Models map classes to database tables for data storage [OK]
Common Mistakes:
  • Confusing models with UI components
  • Thinking models handle HTTP requests
  • Mixing models with styling or CSS
2. Which of the following is the correct way to define a model class named User with an integer primary key id in Flask-SQLAlchemy?
easy
A. class User():\n id = Column(Integer, primary_key=True)
B. class User(db.Model):\n id = Column(Integer)
C. def User(db.Model):\n id = db.Column(db.Integer, primary_key=True)
D. class User(db.Model):\n id = db.Column(db.Integer, primary_key=True)

Solution

  1. Step 1: Check class definition syntax

    Model classes inherit from db.Model in Flask-SQLAlchemy.
  2. Step 2: Verify column definition

    Columns use db.Column with type and primary key flag.
  3. Final Answer:

    class User(db.Model):\n id = db.Column(db.Integer, primary_key=True) -> Option D
  4. Quick Check:

    Model class inherits db.Model and uses db.Column [OK]
Hint: Model classes inherit db.Model; columns use db.Column [OK]
Common Mistakes:
  • Forgetting to inherit from db.Model
  • Using Column without db prefix
  • Defining model as a function instead of class
3. Given this model definition:
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

p = Product(id=1, name='Book')
print(p.name)

What will be the output?
medium
A. Product object
B. 1
C. Book
D. Error: missing __init__ method

Solution

  1. Step 1: Understand model instance creation

    Creating p = Product(id=1, name='Book') sets attributes directly.
  2. Step 2: Check what print(p.name) outputs

    It prints the name attribute value, which is 'Book'.
  3. Final Answer:

    Book -> Option C
  4. Quick Check:

    Accessing attribute prints its value [OK]
Hint: Instance attributes print their assigned values [OK]
Common Mistakes:
  • Assuming print shows object type
  • Expecting error due to no explicit __init__
  • Confusing id and name values
4. What is wrong with this model definition?
class Employee(db.Model):
    id = db.Column(db.Integer)
    name = db.Column(db.String, primary_key=True)
medium
A. db.String requires a length argument
B. Columns must be defined inside a method, not directly
C. Model class must have a __tablename__ attribute
D. Primary key should be on the id column, not name

Solution

  1. Step 1: Check db.String usage

    db.String requires a length argument like db.String(100).
  2. Step 2: Verify other parts

    Primary key can be on any column; __tablename__ is optional; columns are defined directly.
  3. Final Answer:

    db.String requires a length argument -> Option A
  4. Quick Check:

    db.String must have length [OK]
Hint: Always specify length in db.String(length) [OK]
Common Mistakes:
  • Assuming primary key must be id
  • Thinking __tablename__ is mandatory
  • Defining columns inside methods
5. You want to define a model Order with a composite primary key consisting of order_id (integer) and product_id (integer). Which is the correct way to define this in Flask-SQLAlchemy?
hard
A. class Order(db.Model):\n order_id = db.Column(db.Integer, primary_key=True)\n product_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
B. class Order(db.Model):\n order_id = db.Column(db.Integer)\n product_id = db.Column(db.Integer)\n __table_args__ = (db.PrimaryKeyConstraint('order_id', 'product_id'),)
C. class Order(db.Model):\n order_id = db.Column(db.Integer, primary_key=True)\n product_id = db.Column(db.Integer)
D. class Order(db.Model):\n order_id = db.Column(db.Integer)\n product_id = db.Column(db.Integer)

Solution

  1. Step 1: Understand composite primary keys

    Composite keys require defining multiple columns as primary keys together.
  2. Step 2: Check Flask-SQLAlchemy syntax for composite keys

    Use __table_args__ with db.PrimaryKeyConstraint listing columns.
  3. Final Answer:

    class Order(db.Model):\n order_id = db.Column(db.Integer)\n product_id = db.Column(db.Integer)\n __table_args__ = (db.PrimaryKeyConstraint('order_id', 'product_id'),) -> Option B
  4. Quick Check:

    Composite keys use __table_args__ with PrimaryKeyConstraint [OK]
Hint: Use __table_args__ with PrimaryKeyConstraint for composite keys [OK]
Common Mistakes:
  • Setting primary_key=True on multiple columns separately
  • Not using __table_args__ for composite keys
  • Defining only one column as primary key
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