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

Метод invalidate класса Connection

Метод invalidate класса Connection помечает текущее соединение как недействительное. При этом само соединение немедленно закрывается, а связанный с ним ресурс возвращается в пул с признаком непригодности. Параметров метод не принимает. Такой подход полезен, когда соединение повреждено или находится в неизвестном состоянии, и его дальнейшее использование небезопасно.

В отличие от метода close, который возвращает соединение в пул для повторного использования, метод invalidate гарантирует, что данное соединение больше не будет выдано другим потребителям. После вызова метода атрибут invalidated принимает значение True, а атрибут closed также становится True.

Синтаксис

Connection.invalidate()

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('SELECT 1')) print('before invalidate:', conn.invalidated, conn.closed) conn.invalidate() print('after invalidate:', conn.invalidated, conn.closed)

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

"before invalidate: False False" "after invalidate: True True"

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') conn = engine.connect() conn.invalidate() try: conn.execute(text('SELECT 1')) except Exception as exc: print(type(exc).__name__) print(str(exc)) finally: conn.close()

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

"ResourceClosedError" "This connection is closed"

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.begin() as conn: conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR(100)' ')' )) conn.execute(text( "INSERT INTO articles (id, title) VALUES (1, 'article')" )) conn = engine.connect() conn.invalidate() with engine.connect() as new_conn: res = new_conn.execute(text('SELECT title FROM articles')) print(res.fetchall())

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

[('article',)]

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

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