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

Событие checkin

Событие checkin относится к событиям пула соединений и срабатывает в момент, когда соединение возвращается обратно в пул после завершения работы с ним. Событие принимает первым параметром объект dbapi_connection, который представляет собой соединение на уровне DBAPI, а вторым параметром - объект connection_record, который хранит информацию о данном соединении в пуле. Событие полезно для логирования, аудита и сброса состояния соединения перед его повторным использованием.

Синтаксис

from sqlalchemy import event event.listen(pool, 'checkin', fn)

Здесь pool - это объект пула соединений, полученный через engine.pool, 'checkin' - имя события, а fn - функция-обработчик, которая принимает dbapi_connection и connection_record.

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine.pool, 'checkin') def on_checkin(dbapi_connection, connection_record): print('connection returned to pool') with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"connection returned to pool"

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine.pool, 'checkin') def reset_state(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute('PRAGMA user_version = 0') cursor.close() print('state reset') with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"state reset"

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine.pool, 'checkin') def log_checkin(dbapi_connection, connection_record): print('checked in record:', id(connection_record)) with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"checked in record: 140234567890123"

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

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