(2) Асинхронный SQLAlchemy 2: пошаговый гайд по управлению сессиями, добавлению и извлечению данных с Pydantic

rw-book-cover

Metadata

  • Author: Хабр
  • Full Title: (2) Асинхронный SQLAlchemy 2: пошаговый гайд по управлению сессиями, добавлению и извлечению данных с Pydantic
  • Category:#articles
  • Document Tags: outline Outline pydantic sqlalchemy
  • Summary: Статья объясняет, как управлять сессиями и работать с базой данных асинхронно с помощью SQLAlchemy и Pydantic. Она рассматривает автоматизацию создания и закрытия сессий, а также методы добавления и извлечения данных. Важно освоить основные концепции, прежде чем переходить к более сложным темам.
  • URL: https://habr.com/ru/companies/amvera/articles/850470/

Highlights

  • flush в SQLAlchemy отправляет изменения в базу данных без их окончательной фиксации, то есть без выполнения коммита. Это полезно, когда нужно сгенерировать данные, такие как идентификаторы (например, user.id), чтобы использовать их до фактического сохранения данных в базе. При этом сама транзакция остаётся открытой, и окончательное сохранение происходит позже, при вызове commit. (View Highlight)

  • Для массового добавления данных в SQLAlchemy существует удобный метод add_all. Он работает аналогично методу add, но принимает на вход список экземпляров (инстансов). С его помощью мы можем добавить сразу несколько записей за одну операцию. Давайте рассмотрим пример, где добавим пять пользователей с использованием этого метода. (View Highlight)

  • try: await session.commit() except SQLAlchemyError as e: await session.rollback() raise e (View Highlight)

  • После того как запрос был выполнен с помощью метода session.execute(query), SQLAlchemy возвращает объект result. Этот объект содержит строки, полученные из базы данных, но чтобы превратить их в объекты моделей или нужный формат, нужно выполнить преобразование. Для этого используются различные методы: scalars(), all(), first(), и другие. (View Highlight)

  • Мы знаем, что сейчас должна автоматически подгрузится информация по профилям пользователей, ведь мы в прошлый раз указывали в описании модели «lazy=»joined»», а я гарантировал, что информация подтянется автоматически. (View Highlight)

  • Описания полей достаточно понятны, а что заслуживает внимание так это model_config (переменная, в которой прописываются конфигурации конкретной модели). Разберемся с атрибутами и значениями. • from_attributes = True: это позволяет модели автоматически маппить атрибуты Python объектов на поля модели. Примерно то что мы делали в методе to_dict, но более расширенно. (View Highlight)

  • Метод from_orm в Pydantic используется для создания экземпляра Pydantic модели на основе объекта ORM. Этот метод автоматически преобразует данные из ORM объекта в Pydantic модель, что позволяет легко работать с данными, извлеченными из базы данных через ORM (например, SQLAlchemy). (View Highlight)

  • Подгрузка данных в SQLAlchemy SQLAlchemy предоставляет два основных подхода для подгрузки данных из связанных таблиц:

    1. Подгрузка через join (явный JOIN в запросе).
    2. Подгрузка через options (гибкая загрузка с использованием стратегий). (View Highlight)

📂 Articles | Последнее изменение: 10.12.2024 14:19