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

Метод invalidate

Метод invalidate класса Session помечает текущее соединение с базой данных как недействительное и сбрасывает его. Метод принимает необязательный параметр connection_is_valid, который указывает, следует ли считать соединение пригодным для дальнейшего использования. Если параметр равен False (значение по умолчанию), соединение будет закрыто и исключено из пула. Если параметр равен True, SQLAlchemy попытается использовать соединение повторно, предварительно проверив его валидность. Метод не принимает других аргументов и возвращает None.

Синтаксис

Session.invalidate(connection_is_valid=False)

Пример

Давайте создадим сессию, выполним запрос и сбросим соединение методом invalidate:

from sqlalchemy import create_engine, text from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') with Session(engine) as session: res = session.execute(text('SELECT 1')) print(res.scalar()) session.invalidate() print(session.is_active)

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

"1" "False"

Пример

Давайте проверим, что после вызова invalidate с параметром connection_is_valid=True сессия остается активной:

from sqlalchemy import create_engine, text from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') with Session(engine) as session: session.execute(text('SELECT 1')) session.invalidate(connection_is_valid=True) print(session.is_active) res = session.execute(text('SELECT 2')) print(res.scalar())

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

"True" "2"

Пример

Давайте посмотрим, как метод invalidate влияет на объекты, загруженные в сессию. После сброса соединения объекты становятся недействительными и будут перезагружены при следующем обращении:

from sqlalchemy import create_engine, text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, 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: session.add(Article(title='article')) session.commit() article = session.get(Article, 1) print(article.title) session.invalidate() print(article.title)

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

"article" "article"

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

  • класс Session,
    который представляет сессию работы с базой
  • метод close,
    который закрывает сессию и освобождает ресурсы
  • метод rollback,
    который откатывает текущую транзакцию
  • атрибут is_active,
    который показывает, активна ли сессия
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить