РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
519 of 711 menu

Функция undefer

Функция undefer отменяет действие отложенной загрузки для указанных атрибутов модели. Когда колонка помечена как отложенная (через defer или load_only), она не загружается из базы данных по умолчанию. Функция undefer позволяет принудительно загрузить эти колонки в конкретном запросе. Первым параметром передаётся имя атрибута или сама колонка.

Синтаксис

undefer(key, [raiseload])

Пример

Давайте создадим модель и отложим загрузку колонки text, а затем отменим ее с помощью undefer:

from sqlalchemy import create_engine, String, Text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.orm import defer, undefer class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(Text) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text') session.add(article) session.commit() with Session(engine) as session: res = session.query(Article).options( defer(Article.text) ).first() print(res.__dict__)

Результат выполнения кода:

{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x...>, 'id': 1, 'title': 'article'}

Пример

Теперь отменим отложенную загрузку с помощью функции undefer:

from sqlalchemy import create_engine, String, Text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.orm import defer, undefer class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(Text) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text') session.add(article) session.commit() with Session(engine) as session: res = session.query(Article).options( defer(Article.text), undefer(Article.text) ).first() print(res.__dict__)

Результат выполнения кода:

{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x...>, 'id': 1, 'title': 'article', 'text': 'some text'}

Смотрите также

  • функцию defer,
    которая откладывает загрузку атрибута
  • функцию undefer_group,
    которая отменяет отложенную загрузку группы
  • функцию load_only,
    которая загружает только указанные колонки
  • функцию selectinload,
    которая загружает связи через отдельный запрос
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить