Ответ
SQLAlchemy — это мощный SQL-инструментарий и ORM (Object-Relational Mapper) для Python, который предоставляет полный набор инструментов для работы с базами данных.
Он состоит из двух основных компонентов:
-
SQLAlchemy Core:
- Низкоуровневый компонент, который предоставляет SQL Expression Language.
- Позволяет создавать SQL-запросы программно, используя Python-объекты, что делает код более читаемым и защищенным от SQL-инъекций по сравнению с "сырыми" строками.
- Не скрывает SQL, а предоставляет для него удобную абстракцию.
-
SQLAlchemy ORM:
- Высокоуровневый компонент, построенный поверх Core.
- Позволяет сопоставлять (маппить) Python-классы с таблицами в базе данных. Это дает возможность работать с записями в БД как с обычными Python-объектами.
- Управляет сессиями, транзакциями и отношениями между объектами (one-to-one, one-to-many, many-to-many).
Пример использования ORM:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
# 1. Определение движка и базового класса для моделей
engine = create_engine('sqlite:///example.db')
Base = declarative_base()
# 2. Описание модели (таблицы)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(50))
# 3. Создание таблицы в БД
Base.metadata.create_all(engine)
# 4. Работа с данными через сессию
Session = sessionmaker(bind=engine)
session = Session()
# Создание нового пользователя
new_user = User(name='John Doe', email='john.doe@example.com')
session.add(new_user)
session.commit() # Сохранение изменений в БД
# Запрос данных
all_users = session.query(User).all()
for user in all_users:
print(f'ID: {user.id}, Name: {user.name}')
session.close()
Для управления миграциями схемы базы данных совместно с SQLAlchemy часто используется инструмент Alembic.