Запросы через Session
Читайте и фильтруйте данные
«Запросы через Session» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Сессия
ORM выполняет всю свою работу через сессию. Она управляет единицей работы: отслеживает новые, изменённые и удалённые объекты и взаимодействует с базой данных.
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
print('Session open:', session)Добавление объектов
session.add() подготавливает новый объект. В базу данных ничего не попадёт, пока Вы не вызовете commit().
from sqlalchemy.orm import Session
# session.add(user) stages it
# session.commit() writes it
print('add stages, commit saves')Фиксация изменений
session.commit() отправляет ожидающие изменения в базу данных и фиксирует транзакцию, делая их постоянными.
# with Session(engine) as session:
# session.add(User(name='Alice'))
# session.commit()
print('commit persists the work')Запросы с помощью select()
Современный SQLAlchemy считывает данные с помощью select(), выполняемого через сессию. scalars() возвращает экземпляры моделей.
from sqlalchemy import select
# stmt = select(User)
# users = session.scalars(stmt).all()
print('select(User) then scalars().all()')Получение всех строк
session.scalars(select(User)).all() возвращает список всех объектов User в таблице.
from sqlalchemy import select
# all_users = session.scalars(select(User)).all()
# for u in all_users:
# print(u.name)
print('all() returns a list of objects')Фильтрация с помощью where()
Добавьте условие where() для фильтрации. Сравните сопоставленный столбец с помощью обычного оператора Python.
from sqlalchemy import select
# stmt = select(User).where(User.age > 28)
# adults = session.scalars(stmt).all()
print('where(User.age > 28) filters rows')Получение одного объекта
session.scalars(stmt).first() возвращает первое совпадение или None. one() ожидает ровно одну строку и в противном случае выдаёт ошибку.
from sqlalchemy import select
# stmt = select(User).where(User.name == 'Alice')
# user = session.scalars(stmt).first()
print('first() = first match or None')Поиск по первичному ключу
session.get(User, 1) — самый быстрый способ получить один объект по его первичному ключу.
# user = session.get(User, 1)
# print(user.name)
print('session.get(Model, pk) fetches by id')Сортировка результатов
Добавьте order_by() в цепочку вызовов для сортировки. Используйте .desc() для столбца, чтобы отсортировать данные по убыванию.
from sqlalchemy import select
# stmt = select(User).order_by(User.age.desc())
# sorted_users = session.scalars(stmt).all()
print('order_by(User.age.desc()) sorts results')Изменение объекта
Измените атрибут загруженного объекта, затем вызовите commit(). Сессия обнаружит изменение и выполнит UPDATE.
# user = session.get(User, 1)
# user.name = 'Alicia'
# session.commit() # auto UPDATE
print('Edit attribute, then commit')Удаление объекта
session.delete(obj) помечает объект для удаления. DELETE выполняется при следующей фиксации.
# user = session.get(User, 1)
# session.delete(user)
# session.commit() # row removed
print('delete(obj) then commit removes the row')Проверка
Проверьте свои знания о сессиях.
Повторение
Вы научились считывать и изменять данные через сессию.
Sessionотслеживает Вашу единицу работыadd()подготавливает изменения, аcommit()сохраняет ихselect()+scalars()считывают объекты, аwhere()выполняет фильтрациюsession.get()получает объект по первичному ключу; изменения иdelete()применяются при фиксации
Часто задаваемые вопросы
Урок «Запросы через Session» бесплатный?
Да — полный текст урока «Запросы через Session» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Запросы через Session»?
Читайте и фильтруйте данные Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Запросы через Session»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- SQLAlchemy Core и ORM
- Определение моделей
- Запросы через Session
- Связи и объединения