Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is SQLAlchemy used for in FastAPI?
SQLAlchemy is used to manage database operations in FastAPI. It helps connect to the database, define tables as Python classes, and perform queries easily.
Click to reveal answer
beginner
What is the purpose of the SessionLocal in SQLAlchemy setup with FastAPI?
SessionLocal creates a new database session for each request. It manages the connection and ensures changes are saved or rolled back properly.
Click to reveal answer
beginner
Why do we use Base = declarative_base() in SQLAlchemy?
It creates a base class for all database models. Models inherit from <code>Base</code> to define tables and columns in the database.
Click to reveal answer
intermediate
How do you ensure the database session is closed after a FastAPI request?
Use a dependency with yield to provide the session and close it after the request finishes. This avoids leaving open connections.
Click to reveal answer
beginner
What is the role of engine = create_engine() in SQLAlchemy setup?
The engine connects SQLAlchemy to the actual database. It manages the database URL and handles communication between Python and the database.
Click to reveal answer
Which SQLAlchemy component defines the structure of database tables?
AFastAPI app instance
BBase class from declarative_base()
Ccreate_engine()
DSessionLocal
✗ Incorrect
The Base class from declarative_base() is used to create models that define tables and columns.
What does the SessionLocal object do in FastAPI with SQLAlchemy?
ACreates a new database session per request
BDefines database tables
CStarts the FastAPI server
DHandles HTTP requests
✗ Incorrect
SessionLocal manages database sessions, creating one for each request.
How do you properly close a database session in FastAPI?
AUse a dependency with yield to close after request
BCall session.close() manually in every route
CLet Python garbage collector handle it
DNo need to close sessions
✗ Incorrect
Using a dependency with yield ensures the session closes automatically after the request.
What is the purpose of create_engine() in SQLAlchemy?
ACreate HTTP responses
BDefine API routes
CConnect to the database
DManage user sessions
✗ Incorrect
create_engine() sets up the connection to the database.
Which of these is NOT part of a typical SQLAlchemy setup in FastAPI?
Adeclarative_base()
BSessionLocal
Ccreate_engine()
DReact components
✗ Incorrect
React components are unrelated to SQLAlchemy or FastAPI backend setup.
Explain the steps to set up SQLAlchemy with FastAPI for database access.
Think about how you connect, define tables, and manage sessions.
You got /5 concepts.
Describe how you use a database session safely in FastAPI routes.
Focus on lifecycle of session during a request.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of SessionLocal in a FastAPI app using SQLAlchemy?
easy
A. To create a new database session for each request
B. To define the database schema
C. To connect directly to the database engine
D. To store user authentication data
Solution
Step 1: Understand the role of SessionLocal
SessionLocal is a session factory that creates new database sessions for each request to ensure safe and isolated database operations.
Step 2: Differentiate from other components
The database schema is defined by models, the engine connects to the database, and user data is unrelated to SessionLocal.
Final Answer:
To create a new database session for each request -> Option A
Quick Check:
SessionLocal creates new sessions per request [OK]
Hint: SessionLocal always means a new session per request [OK]
Common Mistakes:
Confusing SessionLocal with engine
Thinking SessionLocal defines schema
Assuming SessionLocal stores user data
2. Which of the following is the correct way to create the SQLAlchemy engine in FastAPI?
easy
A. engine = create_engine('sqlite:///./test.db', connect_args={'check_same_thread': False})
B. engine = create_engine('sqlite:///:memory:')
C. engine = create_engine('postgresql://user:pass@localhost/db')
D. engine = create_engine('mysql://user@localhost/db')
Solution
Step 1: Identify the common FastAPI SQLite engine setup
FastAPI tutorials often use SQLite with the URL 'sqlite:///./test.db' and the argument to allow multiple threads.
Step 2: Check options for correctness
engine = create_engine('sqlite:///./test.db', connect_args={'check_same_thread': False}) matches the typical FastAPI SQLite setup with connect_args to avoid threading errors.
Final Answer:
engine = create_engine('sqlite:///./test.db', connect_args={'check_same_thread': False}) -> Option A
Quick Check:
SQLite engine with check_same_thread=False [OK]
Hint: SQLite needs check_same_thread=False in FastAPI [OK]
Common Mistakes:
Omitting connect_args causing threading errors
Using wrong database URL format
Confusing in-memory with file-based SQLite
3. Given this FastAPI SQLAlchemy session usage, what will print(user.name) output?
from sqlalchemy.orm import Session
def get_user(db: Session, user_id: int):
return db.query(User).filter(User.id == user_id).first()
user = get_user(db=session, user_id=1)
print(user.name)
medium
A. None
B. The name of the user with id 1
C. Raises AttributeError
D. Raises SQLAlchemyError
Solution
Step 1: Understand the query behavior
The query filters User by id=1 and returns the first match or None if not found.
Step 2: Analyze the print statement
If a user with id=1 exists, user.name prints the name; otherwise, user is None and accessing name would error.
Final Answer:
The name of the user with id 1 -> Option B
Quick Check:
Query returns user object [OK]
Hint: Query.first() returns object or None; here user exists [OK]
Common Mistakes:
Assuming print outputs None without checking user
Expecting an error without verifying user exists
Confusing filter with filter_by syntax
4. Identify the error in this FastAPI SQLAlchemy session usage:
Adding an object to the session requires calling db.commit() to persist changes to the database.
Step 2: Verify other parts of the code
db.add() is correct, User model import is assumed, and returning the new user is expected.
Final Answer:
Missing call to db.commit() to save changes -> Option C
Quick Check:
db.commit() needed after db.add() [OK]
Hint: Always commit after adding to session [OK]
Common Mistakes:
Forgetting db.commit() after db.add()
Using db.insert() instead of db.add()
Returning wrong type from function
5. You want to set up SQLAlchemy with FastAPI to support multiple database types (SQLite, PostgreSQL) using environment variables. Which approach correctly configures the engine and session?
hard
A. Use sessionmaker() without binding engine
B. Hardcode SQLite URL in create_engine and ignore env vars
C. Create engine without URL and pass URL to sessionmaker
D. Use DATABASE_URL env var, pass it to create_engine, then create SessionLocal with sessionmaker(bind=engine)
Solution
Step 1: Use environment variable for database URL
Reading DATABASE_URL from environment allows flexible switching between databases.
Step 2: Create engine with the URL and bind sessionmaker
Pass the URL to create_engine, then bind the engine to sessionmaker to create SessionLocal.
Final Answer:
Use DATABASE_URL env var, pass it to create_engine, then create SessionLocal with sessionmaker(bind=engine) -> Option D
Quick Check:
Env var URL + engine + sessionmaker(bind=engine) [OK]
Hint: Always bind engine to sessionmaker using env var URL [OK]
Common Mistakes:
Hardcoding URLs reduces flexibility
Not binding engine to sessionmaker causes errors
Passing URL to sessionmaker instead of create_engine