Ответ
Для работы с базами данных в 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 и нужен чисто асинхронный инструмент.
Ответ 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, а то потом будешь материться больше, чем я сейчас.