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

Событие checkout

Событие checkout срабатывает в момент, когда соединение извлекается из пула соединений движка. Оно позволяет перехватить момент выдачи соединения и выполнить дополнительные действия, например, настроить сессию СУБД или сбросить состояние. Событие принимает параметры dbapi_connection, connection_record и connection_proxy.

Синтаксис

from sqlalchemy import event @event.listens_for(engine, 'checkout') def on_checkout(dbapi_connection, connection_record, connection_proxy): pass

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'checkout') def on_checkout(dbapi_connection, connection_record, connection_proxy): print('Connection checked out from pool') with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"Connection checked out from pool"

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') checkout_count = 0 @event.listens_for(engine, 'checkout') def on_checkout(dbapi_connection, connection_record, connection_proxy): global checkout_count checkout_count += 1 print(f'Checkout number: {checkout_count}') with engine.connect() as conn: conn.execute(text('SELECT 1')) conn.execute(text('SELECT 2')) with engine.connect() as conn: conn.execute(text('SELECT 3')) print(f'Total checkouts: {checkout_count}')

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

"Checkout number: 1" "Checkout number: 2" "Total checkouts: 2"

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'checkout') def on_checkout(dbapi_connection, connection_record, connection_proxy): cursor = dbapi_connection.cursor() cursor.execute('PRAGMA foreign_keys=ON') cursor.close() print('Foreign keys enabled') with engine.connect() as conn: res = conn.execute(text('PRAGMA foreign_keys')).scalar() print(f'Foreign keys: {res}')

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

"Foreign keys enabled" "Foreign keys: 1"

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

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