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

Функция object_session

Функция object_session возвращает объект сессии, с которой связан переданный объект модели. Первым параметром функция принимает экземпляр модели. Если объект не привязан ни к какой сессии, функция возвращает None. Это удобно для получения сессии внутри методов модели без передачи ее явно.

Синтаксис

object_session(instance)

Пример

Давайте создадим модель и получим сессию для объекта через функцию object_session:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.orm import object_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) with Session(engine) as session: article = Article(title='article') session.add(article) session.flush() res = object_session(article) print(res is session)

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

True

Пример

Давайте проверим, что для объекта вне сессии функция возвращает None:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.orm import object_session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] article = Article(title='article') res = object_session(article) print(res)

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

None

Пример

Давайте используем функцию внутри метода модели для доступа к сессии:

from sqlalchemy import create_engine, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.orm import object_session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] def siblings(self): session = object_session(self) stmt = select(Article).where(Article.id != self.id) return session.scalars(stmt).all() engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1'), Article(title='article 2'), Article(title='article 3'), ]) session.flush() article = session.scalars(select(Article)).first() res = [a.title for a in article.siblings()] print(res)

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

['article 2', 'article 3']

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

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