Python / FastAPI Basics Interview Questions
How do you integrate an async SQLAlchemy database with FastAPI?
For async database access, use SQLAlchemy 2.x with AsyncSession and create_async_engine paired with an async driver such as asyncpg (PostgreSQL) or aiosqlite (SQLite). The DB session is injected via a generator dependency.
# pip install sqlalchemy asyncpg from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy import select from fastapi import FastAPI, Depends from typing import Annotated DATABASE_URL = "postgresql+asyncpg://user:pass@localhost/db" engine = create_async_engine(DATABASE_URL, echo=True) AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False) class Base(DeclarativeBase): pass class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True) username: Mapped[str] = mapped_column(unique=True) email: Mapped[str] # DB dependency â yields session, always closes it async def get_db() -> AsyncSession: async with AsyncSessionLocal() as session: yield session DBDep = Annotated[AsyncSession, Depends(get_db)] app = FastAPI() @app.on_event("startup") async def startup(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) # create tables @app.get("/users") async def list_users(db: DBDep): result = await db.execute(select(User)) users = result.scalars().all() return users @app.post("/users", status_code=201) async def create_user(username: str, email: str, db: DBDep): user = User(username=username, email=email) db.add(user) await db.commit() await db.refresh(user) return user
More Related questions...