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

Метод dispose

Метод dispose класса AsyncEngine закрывает пул соединений и освобождает все ресурсы, связанные с движком. После вызова метода движок становится непригодным для дальнейшего использования - попытка открыть новое соединение приведет к ошибке. Метод является асинхронным, поэтому его следует вызывать через await.

Метод не принимает обязательных параметров и возвращает None. Его удобно применять при завершении работы приложения или при необходимости принудительно разорвать все активные соединения с базой данных.

Синтаксис

await engine.dispose()

Пример

Давайте создадим асинхронный движок для базы SQLite в памяти, выполним простой запрос и закроем пул соединений:

import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.connect() as conn: res = await conn.execute(text('SELECT 1')) print(res.scalar()) await engine.dispose() print('Engine disposed') asyncio.run(main())

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

1 Engine disposed

Пример

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

import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') await engine.dispose() try: async with engine.connect() as conn: await conn.execute(text('SELECT 1')) except Exception as e: print(type(e).__name__) asyncio.run(main())

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

"InvalidRequestError"

Пример

Давайте создадим таблицу articles, добавим строку, а затем корректно закроем движок методом dispose:

import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR, ' 'text VARCHAR, ' 'status VARCHAR, ' 'num INTEGER)' )) await conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article', 'text', 'draft', 1)" )) async with engine.connect() as conn: res = await conn.execute(text('SELECT title FROM articles')) print(res.scalar()) await engine.dispose() print('Pool closed') asyncio.run(main())

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

article Pool closed

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

  • класс AsyncEngine,
    который представляет асинхронный движок базы данных
  • метод connect,
    который открывает соединение с базой
  • метод begin,
    который открывает транзакцию
  • атрибут pool,
    который хранит пул соединений движка
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить