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

Функция make_transient_to_detached

Функция make_transient_to_detached переводит объект из состояния transient в состояние detached. Transient-объект - это экземпляр модели, который еще не был добавлен в сессию и не имеет записи в базе данных. Функция принимает один параметр - сам объект модели. После вызова объект получает идентификатор и может быть присоединен к новой сессии через метод merge.

Синтаксис

make_transient_to_detached(instance)

Пример

Давайте создадим transient-объект модели Article и переведем его в detached-состояние:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, make_transient_to_detached, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) article = Article(id=1, title='article') make_transient_to_detached(article) print(article.id) print(article.title)

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

1 "article"

Пример

Теперь давайте свяжем detached-объект с новой сессией через метод merge и сохраним его:

from sqlalchemy import create_engine, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, make_transient_to_detached, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) article = Article(id=1, title='article') make_transient_to_detached(article) with Session(engine) as session: merged = session.merge(article) session.commit() print(merged.id) print(merged.title)

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

1 "article"

Пример

Давайте проверим, что после вызова функции объект действительно находится в detached-состоянии:

from sqlalchemy import create_engine, inspect from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, make_transient_to_detached class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) article = Article(id=1, title='article') make_transient_to_detached(article) state = inspect(article) print(state.detached) print(state.persistent) print(state.transient)

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

True False False

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

  • функцию make_transient,
    которая переводит объект в transient-состояние
  • функцию object_session,
    которая возвращает сессию для объекта
  • функцию close_all_sessions,
    которая закрывает все открытые сессии
  • класс DeclarativeBase,
    который является базовым классом для моделей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить