📖 Scenario: You are building a simple web app to store information about books in a library.Each book has a title, an author, and a year it was published.
🎯 Goal: Create a Flask model to represent a Book with the fields title, author, and year_published.
📋 What You'll Learn
Use Flask-SQLAlchemy to define the model
Create a model class named Book
Include fields: id (primary key), title (string), author (string), and year_published (integer)
💡 Why This Matters
🌍 Real World
Defining models is essential for building web apps that store and manage data like books, users, or products.
💼 Career
Understanding model definition with Flask and SQLAlchemy is a key skill for backend web developers working with Python.
Progress0 / 4 steps
1
Set up the Flask app and SQLAlchemy
Create a Flask app instance called app and initialize SQLAlchemy with db = SQLAlchemy(app).
Flask
Hint
Import Flask and SQLAlchemy. Then create app = Flask(__name__) and db = SQLAlchemy(app).
2
Create the Book model class
Define a class called Book that inherits from db.Model.
Flask
Hint
Define class Book(db.Model): and add columns for id, title, author, and year_published.
3
Add a string representation method
Add a __repr__ method to the Book class that returns a string like <Book 'Title' by Author>.
Flask
Hint
Define def __repr__(self): and return a formatted string with the book's title and author.
4
Create the database tables
Call db.create_all() to create the tables in the database.
Flask
Hint
Use with app.app_context(): then call db.create_all() to create tables.
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
Step 1: Understand what a model represents
A model in Flask defines how data is stored and structured in the database.
Step 2: Identify the role of models in the app
Models help manage data easily by mapping Python classes to database tables.
Final Answer:
To represent and manage data structure in the database -> Option A
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
Step 1: Check class definition syntax
Model classes inherit from db.Model in Flask-SQLAlchemy.
Step 2: Verify column definition
Columns use db.Column with type and primary key flag.
Final Answer:
class User(db.Model):\n id = db.Column(db.Integer, primary_key=True) -> Option D
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
Step 1: Understand model instance creation
Creating p = Product(id=1, name='Book') sets attributes directly.
Step 2: Check what print(p.name) outputs
It prints the name attribute value, which is 'Book'.
Final Answer:
Book -> Option C
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
Step 1: Check db.String usage
db.String requires a length argument like db.String(100).
Step 2: Verify other parts
Primary key can be on any column; __tablename__ is optional; columns are defined directly.
Final Answer:
db.String requires a length argument -> Option A
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
Step 1: Understand composite primary keys
Composite keys require defining multiple columns as primary keys together.
Step 2: Check Flask-SQLAlchemy syntax for composite keys
Use __table_args__ with db.PrimaryKeyConstraint listing columns.
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
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 unknownstrongwhile earning +1 Grip toward your certificate.