Ответ
SQLAlchemy — это мощный набор инструментов и ORM (Object-Relational Mapper) для Python, который предоставляет высокоуровневый и низкоуровневый способы работы с реляционными базами данных.
Два основных компонента:
- Core: Низкоуровневый SQL-инструментарий. Он предоставляет абстрактный слой для построения SQL-выражений, управления соединениями (пулинг) и выполнения запросов. Это «правильный» способ писать SQL в Python.
- ORM: Высокоуровневая надстройка над Core. Она связывает таблицы базы данных с классами Python, а строки — с экземплярами этих классов, позволяя манипулировать данными как обычными объектами.
Пример работы с ORM (Декларативный стиль):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, Session
# 1. Определяем базовый класс для моделей
Base = declarative_base()
# 2. Определяем класс-модель, который соответствует таблице в БД
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
email = Column(String(100), unique=True)
# 3. Создаем движок для подключения к БД (SQLite в примере)
engine = create_engine('sqlite:///app.db', echo=True) # echo=True логирует SQL
# 4. Создаем таблицы в БД
Base.metadata.create_all(engine)
# 5. Работаем с данными через сессию
with Session(engine) as session:
# Создание нового пользователя
new_user = User(name='Alice', email='alice@example.com')
session.add(new_user)
session.commit() # INSERT INTO users ...
# Запрос данных
user = session.query(User).filter_by(name='Alice').first()
print(user.email) # alice@example.com
Ключевые преимущества:
- Абстракция от СУБД: Код практически не меняется при переходе с PostgreSQL на MySQL или SQLite.
- Безопасность: Использование параметризованных запросов через ORM или Core предотвращает SQL-инъекции.
- Гибкость: Для сложных аналитических запросов можно использовать Core или гибридный подход (ORM + raw SQL).
- Экосистема: Поддержка Alembic для миграций схемы БД.