Метод close
Метод close класса Session закрывает сессию,
освобождая все соединения с базой данных и очищая
внутреннее состояние. После вызова метода сессия
становится неактивной, но может быть использована
снова - при следующем обращении SQLAlchemy
автоматически откроет новое соединение.
Метод не принимает параметров и не возвращает
значения. Все незакоммиченные изменения будут
потеряны, поэтому перед закрытием сессии следует
вызывать commit или rollback.
Синтаксис
session.close()
Пример
Давайте создадим сессию, добавим объект и закроем
ее методом close:
from sqlalchemy import create_engine
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)
session = Session(engine)
article = Article(title='article')
session.add(article)
session.commit()
session.close()
print(session.is_active)
Результат выполнения кода:
"False"
Пример
После закрытия сессия может быть использована снова - SQLAlchemy откроет новое соединение автоматически:
from sqlalchemy import create_engine, select
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)
session = Session(engine)
session.add(Article(title='article'))
session.commit()
session.close()
res = session.scalars(select(Article)).all()
print(res[0].title)
Результат выполнения кода:
"article"
Пример
Если закрыть сессию с незакоммиченными изменениями, они будут потеряны:
from sqlalchemy import create_engine, select
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)
session = Session(engine)
session.add(Article(title='article'))
session.close()
res = session.scalars(select(Article)).all()
print(res)
Результат выполнения кода:
[]