ORM helps you work with databases using simple code instead of complex SQL. It makes saving and getting data easier and faster.
When you want to avoid writing raw SQL queries.
When you need to work with database data as Python objects.
When you want to keep your code clean and easy to read.
When you want to switch databases without changing much code.
When you want to reduce errors from manual SQL syntax.
Syntax
Flask
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
user = User(name='Alice')
db.session.add(user)
db.session.commit()
Define classes that represent tables in your database.
Use class attributes to define columns and their types.
Examples
This defines a Product table with id, title, and price columns.
Flask
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
price = db.Column(db.Float)
This creates a new product and saves it to the database.
This Flask app uses ORM to create a User table, add a user named Alice, and then retrieve and print her name.
Flask
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
with app.app_context():
db.create_all()
user = User(name='Alice')
db.session.add(user)
db.session.commit()
retrieved_user = User.query.first()
print(f'User name: {retrieved_user.name}')
OutputSuccess
Important Notes
ORM lets you think in Python objects, not SQL tables.
It handles database connections and queries behind the scenes.
Remember to commit changes to save data.
Summary
ORM simplifies database work by using Python classes and objects.
It reduces the need to write SQL directly.
It helps keep your code clean and easier to maintain.
Practice
(1/5)
1. Why does using an ORM in Flask make working with databases easier?
easy
A. Because it only works with one type of database
B. Because it requires writing more SQL code manually
C. Because it lets you use Python objects instead of writing SQL queries directly
D. Because it removes the need to understand databases at all
Solution
Step 1: Understand ORM purpose
ORM stands for Object-Relational Mapping, which connects Python classes to database tables.
Step 2: Identify how ORM simplifies work
It lets you use Python objects to create, read, update, and delete data without writing SQL queries manually.
Final Answer:
Because it lets you use Python objects instead of writing SQL queries directly -> Option C
Quick Check:
ORM uses Python objects, not raw SQL [OK]
Hint: Think: ORM means Python objects replace SQL queries [OK]
Common Mistakes:
Thinking ORM requires more SQL code
Believing ORM only supports one database
Assuming ORM removes all database knowledge needs
2. Which of the following is the correct way to define a model class using Flask's ORM (SQLAlchemy)?
easy
A. class User: id = Column(Integer, primary_key=True)
B. def User(): id = Column(Integer, primary_key=True)
C. User = db.Model(id = Column(Integer, primary_key=True))
D. class User(db.Model): id = db.Column(db.Integer, primary_key=True)
Solution
Step 1: Recall Flask SQLAlchemy model syntax
Models inherit from db.Model and define columns with db.Column and types like db.Integer.
Step 2: Check each option
class User(db.Model): id = db.Column(db.Integer, primary_key=True) correctly defines a class inheriting db.Model with a column using db.Column and db.Integer.
Final Answer:
class User(db.Model): 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 and use db.Column for fields [OK]
Common Mistakes:
Not inheriting from db.Model
Using Column without db prefix
Defining model as a function instead of class
3. Given this Flask ORM code:
user = User(name='Alice')
db.session.add(user)
db.session.commit()
print(user.id)
What will print(user.id) output after commit?
medium
A. The new unique ID assigned by the database
B. None
C. An error because id is not set
D. The string 'Alice'
Solution
Step 1: Understand ORM session commit behavior
When you add and commit a new object, the database assigns a unique ID (primary key) automatically.
Step 2: Check what user.id holds after commit
After commit, ORM updates the object with the assigned ID, so user.id contains that new value.
Final Answer:
The new unique ID assigned by the database -> Option A
Quick Check:
Commit assigns and updates object ID [OK]
Hint: After commit, ORM sets the object's ID from the database [OK]
Common Mistakes:
Expecting id to be None before commit
Thinking id is the name value
Assuming commit does not update object fields
4. What is wrong with this Flask ORM code snippet?
user = User(name='Bob')
db.session.add(user)
print(user.id)
medium
A. It will print None because commit is missing
B. It will raise a syntax error
C. It will print the name instead of id
D. It will print a random number
Solution
Step 1: Identify missing commit
The code adds the user to the session but does not commit, so the database does not assign an ID yet.
Step 2: Understand user.id value before commit
Before commit, user.id is None because the database has not generated the primary key.
Final Answer:
It will print None because commit is missing -> Option A
Quick Check:
Commit needed to assign ID [OK]
Hint: Remember to commit to get database-generated IDs [OK]
Common Mistakes:
Forgetting to call commit() after add()
Expecting id to be set immediately after add()
Confusing id with other attributes
5. You want to update a user's email in Flask ORM. Which approach best shows how ORM simplifies this compared to raw SQL?
user = User.query.filter_by(id=5).first()
user.email = 'new@example.com'
db.session.commit()
Why is this simpler than writing SQL?
hard
A. Because you must write raw SQL inside the Python code
B. Because you update the Python object directly without writing an UPDATE SQL statement
C. Because ORM automatically commits changes without calling commit()
D. Because you still need to write the full SQL UPDATE query manually
Solution
Step 1: Understand ORM object update
You fetch the user as a Python object, change its attribute, and commit the session.
Step 2: Compare with raw SQL
Raw SQL requires writing an UPDATE statement manually, but ORM lets you work with objects and attributes directly.
Final Answer:
Because you update the Python object directly without writing an UPDATE SQL statement -> Option B
Quick Check:
ORM updates objects, no manual SQL needed [OK]
Hint: ORM lets you change objects, not write SQL queries [OK]
Common Mistakes:
Thinking ORM requires manual SQL for updates
Assuming commit() is automatic
Believing raw SQL is simpler than ORM
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.