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

Ответ 18+ 🔞

А, слушай, вот этот твой вопрос про базы данных в FastAPI — это вообще святое, блядь! Тут надо не просто выбрать, а выбрать так, чтобы потом не ебаться как лось на льду, понимаешь?

Так вот, смотри. Все эти умники тебе будут советовать ORM, которые под asyncio заточены. И правильно, сука, будут советовать! Потому что если ты в асинхронном приложении синхронную хуйню прикрутишь — это пиздец, нахуй, тормоза будут такие, что мама не горюй. Терпения ноль ебать!

Основных варианта, если по-чесноку, три. И сейчас я тебе их так разложу, что ты сам от себя охуеешь.

Первый — SQLAlchemy. Это, блядь, как Ленин — вечно живой и всем заправляет. Де-факто стандарт, ёпта. Раньше она была синхронная, а теперь, с версии 1.4 и особенно в 2.0, она научилась в асинхронность. Мощная, надёжная, под капотом можно творить такую хуйню, что сам черт ногу сломит. Но, блядь, это как управлять космическим кораблём — нужно знать, за какие рычаги дёргать. Для сложных, больших проектов — самое то. А для простых — может быть овердохуища.

Второй — SQLModel. Вот это, сука, чистая магия! Его тот же самый мужик сделал, который и FastAPI придумал, Себастьян Рамирес. Гений, блядь! Он взял Pydantic (который в FastAPI уже и так везде), взял SQLAlchemy, скрестил их в тёмной комнате и получил SQLModel. Суть в чём? Ты один класс описываешь, а он сразу и схема для валидации запросов, и модель для базы данных! Красота, блядь! Для новых проектов на FastAPI — это идеальный выбор, прям в рот мне чих-пых, как удобно!

Третий — Tortoise-ORM. Эта, блядь, для тех, кто с Django ORM на "ты". Дизайн у них похожий, API простой, интуитивный. Чисто асинхронная, из коробки. Если команда с Django знакома и хочется быстро сделать — она может быть хитрой жопой, которая всех устроит.

А теперь смотри, как эта красота с SQLModel выглядит. Просто блядь, глаз радуется:

from typing import Optional
from sqlmodel import Field, SQLModel, create_engine

# Смотри, смотри! Один класс, а работает на два фронта!
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)

Видишь? table=True — и всё, блядь, модель для базы готова. А в FastAPI ты эту же Hero можешь использовать как response_model или в зависимостях. Всё в одном флаконе! Удобство — пиздец!

Короче, итог такой, на пальцах:

  • SQLModel — твой лучший друг для нового проекта. Интеграция идеальная, писать мало.
  • SQLAlchemy — если ты матёрый зверь и тебе нужна вся мощь и гибкость, или мигрируешь старый проект.
  • Tortoise-ORM — если ты из мира Django и тебе надо быстро и привычно.

Выбирай, не ошибёшься. Главное — не начинай со своей, самописной, обосанной ORM, а то потом будешь материться больше, чем я сейчас.