Какие ORM-библиотеки обычно используют с FastAPI?

Ответ

Для работы с базами данных в FastAPI чаще всего выбирают ORM, поддерживающие asyncio. Ключевые варианты:

  1. SQLAlchemy (2.0+): Де-факто стандарт в Python. Начиная с версии 1.4 и в полной мере в 2.0, SQLAlchemy предлагает нативную асинхронную поддержку, что делает её мощным и надежным выбором для проектов любого масштаба.

  2. SQLModel: Создан автором FastAPI, Себастьяном Рамиресом. Он объединяет Pydantic и SQLAlchemy, позволяя определять структуру данных и модель БД в одном классе. Это идеальный выбор для новых проектов на FastAPI благодаря идеальной интеграции и простоте.

  3. 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 и нужен чисто асинхронный инструмент.