Что такое AsyncSession в SQLAlchemy и какие правила работы с ней в контексте FastAPI микросервиса?
Answer from AI
sobes.tech AI
AsyncSession в SQLAlchemy — это асинхронный вариант сессии для работы с базой данных, который позволяет выполнять операции ввода-вывода (например, запросы к БД) без блокировки основного потока. В контексте FastAPI микросервиса это особенно важно для повышения производительности и масштабируемости.
Основные правила работы с AsyncSession в FastAPI:
-
Создание сессии: Обычно AsyncSession создаётся через
async_sessionmaker, который настраивается на асинхронный движок (например, с использованиемasyncpgдля PostgreSQL). -
Жизненный цикл сессии: В FastAPI рекомендуется использовать зависимость (dependency) с
yield, чтобы создавать сессию на время обработки запроса и корректно её закрывать после. -
Асинхронные операции: Все операции с базой (запросы, коммиты) должны выполняться с использованием
await. -
Транзакции: Можно использовать контекстный менеджер
async with session.begin():для автоматического управления транзакциями.
Пример зависимости для AsyncSession в FastAPI:
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from fastapi import Depends
DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"
engine = create_async_engine(DATABASE_URL, echo=True)
async_session = async_sessionmaker(engine, expire_on_commit=False)
async def get_async_session() -> AsyncSession:
async with async_session() as session:
yield session
В обработчиках FastAPI можно принимать сессию так:
from fastapi import APIRouter, Depends
router = APIRouter()
@router.get("/items/")
async def read_items(session: AsyncSession = Depends(get_async_session)):
result = await session.execute("SELECT * FROM items")
items = result.scalars().all()
return items
Таким образом, AsyncSession обеспечивает неблокирующую работу с БД, что важно для асинхронных веб-приложений на FastAPI.