Async SQLAlchemy allows non-blocking database operations in FastAPI.
1from sqlalchemy.ext.asyncio import (2 create_async_engine,3 AsyncSession,4 async_sessionmaker5)6from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column78class Base(DeclarativeBase):9 pass1011class User(Base):12 __tablename__ = "users"13 id: Mapped[int] = mapped_column(primary_key=True)14 name: Mapped[str]15 email: Mapped[str]1617# Engine and session18engine = create_async_engine(19 "postgresql+asyncpg://user:pass@localhost/db",20 echo=True21)2223async_session = async_sessionmaker(engine, expire_on_commit=False)2425# Dependency26async def get_db():27 async with async_session() as session:28 yield session2930# Usage31async def create_user(db: AsyncSession, name: str, email: str):32 user = User(name=name, email=email)33 db.add(user)34 await db.commit()35 return user3637async def get_users(db: AsyncSession):38 result = await db.execute(select(User))39 return result.scalars().all()
Drivers:
asyncpg.aiomysql.aiosqlite.