Performance: SQLAlchemy setup with FastAPI
This affects the server response time and database query efficiency, impacting how fast the API can send data to the user.
Jump into concepts and practice - no test required
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker engine = create_async_engine('sqlite+aiosqlite:///./test.db') AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) async def get_db(): async with AsyncSessionLocal() as session: yield session
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine('sqlite:///./test.db') SessionLocal = sessionmaker(bind=engine) def get_db(): db = SessionLocal() try: yield db finally: db.close()
| Pattern | DB Connection Type | Event Loop Blocking | Response Latency | Verdict |
|---|---|---|---|---|
| Synchronous SQLAlchemy session | Sync | Blocks event loop | Higher latency under load | [X] Bad |
| Async SQLAlchemy session with async driver | Async | Non-blocking | Lower latency, better throughput | [OK] Good |
SessionLocal in a FastAPI app using SQLAlchemy?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)def create_user(db: Session, user: UserCreate):
db_user = User(name=user.name, email=user.email)
db.add(db_user)
# Missing db.commit()
return db_user