Ответ
SQLAlchemy поддерживает два основных уровня взаимодействия с базой данных:
-
Core – низкоуровневый API, максимально приближенный к SQL. Он позволяет работать напрямую с таблицами, соединениями и SQL-выражениями. Используется, когда требуется полный контроль над генерируемым SQL или для высокопроизводительных операций.
Пример Core API:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData engine = create_engine('sqlite:///example.db') metadata = MetaData() users_table = Table('users', metadata, Column('id', Integer, primary_key=True), Column('name', String), ) metadata.create_all(engine) # Дальнейшие операции с users_table через engine -
ORM (Object Relational Mapper) – высокоуровневый API, который отображает таблицы базы данных на Python-классы (модели). Это упрощает работу с данными, позволяя оперировать объектами вместо SQL-запросов, что повышает продуктивность и читаемость кода.
Пример ORM API:
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base, sessionmaker engine = create_engine('sqlite:///example.db') # Создаем движок для ORM Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) Base.metadata.create_all(engine) # Создаем таблицы, если их нет Session = sessionmaker(bind=engine) session = Session() user = User(name='Alice') session.add(user) session.commit()
Основные различия и когда что использовать:
- Core предоставляет максимальную гибкость и производительность, идеально подходит для сложных, оптимизированных запросов или работы с существующими схемами.
- ORM значительно упрощает разработку бизнес-логики, абстрагируя детали работы с БД. Предпочтителен для большинства CRUD-операций и когда важна скорость разработки.
- ORM использует Core "под капотом" для выполнения SQL-запросов.