Ответ
Для работы с базами данных в FastAPI чаще всего выбирают ORM, поддерживающие asyncio. Ключевые варианты:
-
SQLAlchemy (2.0+): Де-факто стандарт в Python. Начиная с версии 1.4 и в полной мере в 2.0, SQLAlchemy предлагает нативную асинхронную поддержку, что делает её мощным и надежным выбором для проектов любого масштаба.
-
SQLModel: Создан автором FastAPI, Себастьяном Рамиресом. Он объединяет Pydantic и SQLAlchemy, позволяя определять структуру данных и модель БД в одном классе. Это идеальный выбор для новых проектов на FastAPI благодаря идеальной интеграции и простоте.
-
Tortoise-ORM: Асинхронная ORM, вдохновленная Django ORM. Отличается простым и интуитивно понятным API, что делает её популярной в проектах, где важна скорость разработки.
Пример с SQLModel (рекомендуемый для FastAPI):
from typing import Optional
from sqlmodel import Field, SQLModel, create_engine
# 1. Определяем модель, которая является одновременно
# и моделью SQLAlchemy, и схемой Pydantic
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str = Field(index=True)
secret_name: str
age: Optional[int] = Field(default=None, index=True)
# Далее эту модель можно использовать как в FastAPI
# для валидации запросов, так и для работы с БД.
Выбор зависит от задачи:
- SQLModel: Лучший выбор для новых проектов на FastAPI.
- SQLAlchemy: Для сложных систем, миграции существующих проектов или когда требуется вся мощь SQLAlchemy.
- Tortoise-ORM: Если команда имеет опыт с Django ORM и нужен чисто асинхронный инструмент.