Программирование • 27 июля 2026 • 5 мин чтения

SQLAlchemy: что это за библиотека и зачем она нужна

Базы данных в Python часто требуют большого объёма кода и внимания к деталям. SQLAlchemy берёт эту работу на себя, превращая запросы в понятный Python-код. Объясняем, как она работает и с чего начать.

Что такое SQLAlchemy

SQLAlchemy — это библиотека для Python, которая помогает работать с базами данных без написания сырых SQL-запросов. Вместо того чтобы писать SQL вручную, программист пишет Python-код, а SQLAlchemy сама превращает его в нужные запросы. Это делает код чище и безопаснее.

SQLAlchemy состоит из двух частей: Core и ORM. Core работает ближе к SQL — запросы пишутся в синтаксисе Python, но похожи на SQL. ORM — это более простой подход, где таблицы описываются через Python-классы, а библиотека автоматически генерирует SQL.

Тему инкапсуляции изучают на курсе «Python-разработчик». На нём вы за 10 месяцев освоите IT‑профессию с нуля, получите реальный опыт и навыки, которые нужны работодателям.

Зачем нужна SQLAlchemy

Главная причина использовать SQLAlchemy — не писать SQL вручную каждый раз. Библиотека делает код более организованным и защищённым от SQL-инъекций. SQLAlchemy автоматически подставляет параметры безопасным способом.

Ещё одно преимущество — переносимость. Можно переключиться с MySQL на PostgreSQL, не переписывая код. Достаточно поменять строку подключения, и библиотека адаптирует синтаксис под новую базу.

SQLAlchemy подходит как для простых скриптов, так и для больших проектов. Она даёт полный контроль над запросами, когда это нужно, и автоматизирует рутину, когда программист работает через ORM.

Как работает ORM в SQLAlchemy

ORM (Object Relational Mapper) — это механизм, который связывает Python-классы с таблицами в базе данных. Создаётся класс, например User, и каждый объект этого класса соответствует одной строке в таблице users. SQLAlchemy сама отслеживает изменения объектов и сохраняет их в базу.

Это называется паттерном Unit of Work («единица работы»). Вместо того чтобы писать INSERT или UPDATE, программист меняет атрибуты объекта, и библиотека сама решает, что нужно отправить в базу. Она группирует изменения и отправляет их одной транзакцией.

Взаимодействие с базой происходит через объект Session. Это «рабочее пространство», в котором создаются, изменяются и удаляются объекты. Когда всё готово, вызывается session.commit () — и все изменения сохраняются в базе.

Основные возможности SQLAlchemy

У SQLAlchemy есть несколько возможностей, которые делают её удобной. Они помогают как новичкам, так и опытным разработчикам. Расскажем про ключевые возможности.

  • Гибкость. Можно использовать как простой ORM для быстрой разработки, так и Core для сложных запросов с тонкой настройкой.
  • Автоматическое создание таблиц. Библиотека может создавать таблицы в базе по описанию классов.
  • Отношения между таблицами. Поддерживаются связи один-к-одному, один-ко-многим и многие-ко-многим через relationship ().
  • Загрузка связанных объектов. Можно настроить, как загружать связанные данные: сразу (eager) или только при обращении (lazy).

Помимо этого, в возможности SQLAlchemy входит работа с транзакциями. Библиотека поддерживает транзакции через Session с возможностью отката при ошибке.

Тему инкапсуляции изучают на курсе «Python-разработчик». На нём вы за 10 месяцев освоите IT‑профессию с нуля, получите реальный опыт и навыки, которые нужны работодателям.

Примеры работы с SQLAlchemy

Покажем на примере, как выглядит типичная работа с SQLAlchemy. Сначала описываются классы, которые соответствуют таблицам.

python
from sqlalchemy import create_engine, ForeignKey, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship, Session

class Base(DeclarativeBase):
pass

class User(Base):
__tablename__ = "user_account"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(30))
addresses: Mapped[list["Address"]] = relationship(back_populates="user")

class Address(Base):
__tablename__ = "address"
id: Mapped[int] = mapped_column(primary_key=True)
email: Mapped[str]
user_id: Mapped[int] = mapped_column(ForeignKey("user_account.id"))
user: Mapped["User"] = relationship(back_populates="addresses")

После описания классов создаётся движок и генерируются таблицы в базе:

python
engine = create_engine("sqlite:///example.db")
Base.metadata.create_all(engine)

Теперь можно добавлять записи. Создаются объекты, добавляются в сессию и сохраняются:
python
with Session(engine) as session:
user = User(name="alice")
address = Address(email="alice@example.com", user=user)
session.add(user)
session.add(address)
session.commit()

Чтение данных выполняется так:

python
from sqlalchemy import select

with Session(engine) as session:
stmt = select(User).where(User.name == "alice")
user = session.execute(stmt).scalar_one()
print(user.name, user.addresses[0].email)

Как начать изучать SQLAlchemy

Начать изучать SQLAlchemy проще всего с небольшого проекта. Берётся простая база данных, например SQLite, и выполняются базовые операции через ORM.

Лучший способ освоить библиотеку — практиковаться на реальных задачах. Пишется скрипт, который создаёт базу, добавляет записи, читает и обновляет их. Когда основы освоены, можно переходить к более сложным темам: отношениям, настройке загрузки и оптимизации запросов.

Полезно читать официальную документацию и разбирать примеры. SQLAlchemy — большая библиотека, поэтому лучше изучать её постепенно, от простого к сложному. Начинать стоит с ORM, а затем, когда понадобится тонкая настройка, переходить к Core.

Статью подготовили:
Валентина Бокова
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Подпишитесь на наш ежемесячный дайджест статей —
а мы подарим вам полезную книгу про обучение!

Поделиться
Скидка 16% на курсы до 17 сентября. ИИ-навыки уже внутри Забрать скидку
Как ИИ поменяет вашу профессию — пройдите бесплатный тест и получите персональные рекомендации Пройти тест