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 — локальная установка не требуется.
Все уроки этого курса
- SQLAlchemy Core и ORM
- Определение моделей
- Запросы через Session
- Связи и объединения