Ответ
SQLAlchemy Core — это низкоуровневая часть библиотеки SQLAlchemy, предоставляющая мощный и гибкий инструментарий для работы с SQL, в отличие от ORM. Она позволяет строить SQL-запросы программно, сохраняя полный контроль над генерируемым SQL.
Основные преимущества и сценарии использования:
- Полный контроль над SQL: Позволяет писать запросы, максимально приближенные к "сырому" SQL, но с использованием Python-синтаксиса.
- Высокая производительность: Отсутствие ORM-накладных расходов делает Core идеальным для высоконагруженных операций и сложных запросов, требующих тонкой оптимизации.
- Гибкость: Удобен для работы с существующими базами данных, сложными схемами или когда ORM-моделирование избыточно.
- Миграции и утилиты: Часто используется для написания миграций баз данных или служебных скриптов.
Пример использования SQLAlchemy Core:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
# Инициализация движка базы данных (SQLite in-memory)
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
# Определение таблицы
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
# Создание таблицы в базе данных
metadata.create_all(engine)
# Вставка данных
with engine.connect() as conn:
conn.execute(users.insert(), [{'name': 'Alice'}, {'name': 'Bob'}])
conn.commit() # Важно для сохранения изменений
# Выборка данных
query = select(users).where(users.c.name == 'Alice')
with engine.connect() as conn:
result = conn.execute(query).fetchall()
print(result) # Вывод: [(1, 'Alice')]
Я использую SQLAlchemy Core для реализации сложных запросов, требующих максимальной производительности, а также в случаях, когда ORM-абстракция является избыточной или ограничивающей.