Атрибут is_active
Атрибут is_active класса Session возвращает булево значение, которое показывает, активна ли сессия в данный момент. Сессия считается активной, если она была создана и еще не закрыта методом close и не аннулирована методом invalidate. Параметров атрибут не принимает. Значение True говорит о том, что сессия готова выполнять запросы, а False - что сессия больше не может использоваться.
Синтаксис
session.is_active
Пример
Давайте создадим сессию и проверим ее активность сразу после создания:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
session = Session(engine)
print(session.is_active)
session.close()
Результат выполнения кода:
"True"
Пример
Теперь давайте закроем сессию и снова проверим атрибут is_active:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
session = Session(engine)
print(session.is_active)
session.close()
print(session.is_active)
Результат выполнения кода:
"True"
"False"
Пример
Давайте проверим активность сессии после вызова метода invalidate:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
session = Session(engine)
print(session.is_active)
session.invalidate()
print(session.is_active)
Результат выполнения кода:
"True"
"False"
Пример
Давайте используем атрибут is_active для безопасного выполнения запроса только в активной сессии:
from sqlalchemy import create_engine, String
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] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
session = Session(engine)
session.add(Article(title='article 1'))
session.commit()
if session.is_active:
res = session.query(Article).all()
print([article.title for article in res])
session.close()
Результат выполнения кода:
['article 1']
Смотрите также
-
класс
Session,
который представляет сессию работы с базой данных -
метод
close,
который закрывает сессию и делает ее неактивной -
метод
invalidate,
который аннулирует сессию и все ее транзакции -
метод
connection,
который возвращает соединение с базой данных