Какие уровни API для работы с базой данных предоставляет SQLAlchemy?

Ответ

SQLAlchemy поддерживает два основных уровня взаимодействия с базой данных:

  1. 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
  2. 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-запросов.