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

Метод close

Метод close класса AsyncSession закрывает асинхронную сессию, освобождая пул соединений и все связанные с ней ресурсы. Метод не принимает параметров и является асинхронным, поэтому его нужно вызывать через await. После закрытия сессия не может использоваться для выполнения запросов. Метод автоматически выполняет откат текущей транзакции, если она не была зафиксирована.

Синтаксис

await session.close()

Пример

Давайте создадим асинхронную сессию и закроем ее методом close:

import asyncio from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') session = AsyncSession(engine) print('session is active') await session.close() print('session is closed') await engine.dispose() asyncio.run(main())

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

"session is active" "session is closed"

Пример

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

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') session = AsyncSession(engine) res = await session.execute(text('SELECT 1')) print(res.scalar()) await session.close() print('session is closed') await engine.dispose() asyncio.run(main())

Итоговый SQL запрос:

SELECT 1

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

"1" "session is closed"

Пример

Давайте добавим объект в сессию и закроем ее без вызова commit, чтобы изменения не сохранились:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] status: Mapped[str] num: Mapped[int]
import asyncio from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from models import Base, Article async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) session = AsyncSession(engine) article = Article( title='article', text='some text', status='draft', num=1 ) session.add(article) await session.close() print('session is closed') await engine.dispose() asyncio.run(main())

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

"session is closed"

Так как метод commit не был вызван, объект article не был сохранен в базе данных.

Пример

Давайте закроем сессию с помощью асинхронного контекстного менеджера, который автоматически вызывает метод close:

import asyncio from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with AsyncSession(engine) as session: print('session is open') print('session is closed') await engine.dispose() asyncio.run(main())

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

"session is open" "session is closed"

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

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