0Pricing
Python Academy · Урок

SQLAlchemy Core и ORM

Разберитесь с двумя уровнями

«SQLAlchemy Core и ORM» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Что такое SQLAlchemy

SQLAlchemy — самый популярный набор инструментов Python для работы с реляционными базами данных. Он предоставляет два уровня: ядро и ORM.

Установите его с помощью pip install sqlalchemy.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)

Движок

Оба уровня начинаются с движка, создаваемого с помощью create_engine(). Он управляет пулом соединений и умеет взаимодействовать с конкретной базой данных через URL.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)

Два уровня

Ядро — это набор инструментов для создания SQL-выражений: Вы строите запросы, тесно соответствующие SQL.

ORM работает поверх ядра и сопоставляет классы Python с таблицами, поэтому Вы работаете с объектами, а не со строками.

# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')

Ядро: определение таблицы

В ядре Вы явно описываете таблицы с помощью объектов Table и MetaData.

from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
print('Table defined:', users.name)

Ядро: построение запроса

Ядро строит запросы с помощью выражений Python, таких как select(), которые напрямую преобразуются в SQL.

from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)

ORM: сопоставленный класс

В ORM класс Python представляет таблицу. Каждый атрибут сопоставляется со столбцом. Вы запрашиваете и сохраняете объекты, а не необработанные строки.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
print('Mapped class:', User.__tablename__)

Когда использовать ядро

Ядро подходит, когда Вам нужен точный контроль над SQL, требуется обработка больших объёмов данных или выполнение сложных отчётных запросов, для которых объекты создают лишние затраты.

# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')

Когда использовать ORM

ORM подходит для типичного кода приложения: Вы представляете бизнес-сущности в виде классов, получаете отслеживание изменений и пишете меньше шаблонного кода.

# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')

Общий движок

Поскольку ORM построен на ядре, оба уровня используют один и тот же движок и пул соединений. Их даже можно сочетать в одном приложении.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')

Создание таблиц

В ORM вызов Base.metadata.create_all(engine) выполняет инструкции CREATE TABLE для всех сопоставленных классов.

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')

Выбор уровня

Большинство приложений по умолчанию используют ORM для повседневных задач, а в редких случаях переходят к ядру для тяжёлых или тщательно оптимизированных запросов. Знание обоих уровней даёт Вам гибкость.

# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')

Быстрая проверка

Проверьте, насколько хорошо Вы поняли два уровня.

Итоги

Вы познакомились с архитектурой SQLAlchemy.

  • Engine обеспечивает работу всех компонентов через create_engine()
  • Ядро — набор инструментов для создания SQL-выражений, обеспечивающий контроль и производительность
  • ORM сопоставляет классы с таблицами, упрощая разработку приложений
  • Оба уровня используют один и тот же движок и могут сочетаться

Часто задаваемые вопросы

Урок «SQLAlchemy Core и ORM» бесплатный?

Да — полный текст урока «SQLAlchemy Core и ORM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «SQLAlchemy Core и ORM»?

Разберитесь с двумя уровнями Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «SQLAlchemy Core и ORM»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. SQLAlchemy Core и ORM
  2. Определение моделей
  3. Запросы через Session
  4. Связи и объединения
← Назад к Python Academy