Введение
SQLAlchemy и Pydantic — два мощных инструмента Python-разработчика: один для работы с базой данных, другой — для валидации данных. Однако между ними всегда существовал разрыв. Решение этой проблемы — SQLModel – ORM на основе Pydantic, объединяющая лучшее от обоих миров.
SQLModel позволяет использовать типизированные Pydantic-модели как ORM-таблицы SQLAlchemy. Это упрощает разработку, ускоряет создание API и устраняет дублирование кода между моделями БД и сериализаторами.
Установка и подключение
Установка SQLModel:
Подключение к базе данных через SQLAlchemy:
Основы работы с SQLModel
Создание модели:
Особенности:
-
table=True
указывает, что модель используется как таблица -
Типы данных задаются через аннотации
-
Поддержка
default
,nullable
,foreign_key
Создание таблиц и баз данных
Для PostgreSQL:
CRUD-операции с SQLModel
Создание записи
Получение данных
Обновление
Удаление
Асинхронная работа с SQLModel
SQLModel можно использовать с async
SQLAlchemy 2.0:
Асинхронная сессия:
Совместимость с FastAPI
SQLModel идеально сочетается с FastAPI:
Модели SQLModel сразу используются как Pydantic-схемы — их не нужно дублировать.
Фильтрация и запросы
Работа с отношениями (ForeignKey)
Пока нет встроенной загрузки связей (eager/lazy), как в SQLAlchemy, но можно реализовать вручную.
Наследование и повторное использование моделей
Это позволяет отделять схемы запроса, ответа и базу данных.
Миграции с Alembic и SQLModel
Для миграций используйте Alembic с SQLAlchemy:
В env.py
добавьте:
Затем:
Интеграция с Pandas и аналитикой
Преобразование модели в словарь:
Можно легко создать DataFrame:
Сравнение с другими ORM
ORM | Библиотека | Поддержка Pydantic | Асинхронность | Использование в FastAPI |
---|---|---|---|---|
SQLModel | SQLAlchemy + Pydantic | Да | Да | Идеально подходит |
SQLAlchemy | SQLAlchemy | Нет (отдельно) | Да (в 2.0) | Через дополнительные модели |
Tortoise ORM | Асинхронная ORM | Частично | Да | Есть интеграция |
Django ORM | Django | Нет | Ограничена | Только в Django |
Тестирование моделей SQLModel
-
Используйте SQLite в памяти:
-
Генерация базы:
-
Проверка сериализации:
Часто задаваемые вопросы (FAQ)
1. Что такое SQLModel?
Это ORM-библиотека, объединяющая SQLAlchemy и Pydantic в одном синтаксисе.
2. Можно ли использовать SQLModel без FastAPI?
Да, она полностью самостоятельна.
3. Поддерживает ли SQLModel асинхронность?
Да, через SQLAlchemy 2.0 и async engine.
4. Как создать таблицу из модели?
Через SQLModel.metadata.create_all(engine)
.
5. Как реализовать ForeignKey?
Через Field(foreign_key="tablename.columnname")
.
6. Работает ли SQLModel с PostgreSQL?
Да, поддерживает все СУБД, поддерживаемые SQLAlchemy.
Полный справочник по работе с SQLModel
— современной ORM-библиотекой для Python
Установка
Для работы с базами данных:
Основы: объявление модели
Компонент | Назначение |
---|---|
SQLModel |
Родительский класс для всех моделей. |
table=True |
Делает модель таблицей БД. |
Field(...) |
Настройка поля (аналог Column). |
Создание базы данных и таблиц
Синхронные операции с сессией
Чтение из базы
Фильтрация и сортировка
Обновление данных
Удаление записи
Разделение модели: Create, Read, Update
Асинхронная работа (SQLAlchemy 1.4+)
Поддержка связей (ForeignKey)
Использование с FastAPI
Преимущества SQLModel
Особенность | Описание |
---|---|
Типизированные модели | Поддержка mypy , автокомплит, автодокументация. |
Pydantic + SQLAlchemy | Валидация и ORM в одной модели. |
Простота миграции | Работает с Alembic (как и SQLAlchemy). |
Поддержка async | Совместим с FastAPI и асинхронными драйверами. |
Совместимость с select() |
Современные выражения SQLAlchemy 2.0. |
Когда использовать SQLModel
-
Когда ты используешь FastAPI или асинхронные API.
-