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

Событие engine_connect

Событие engine_connect из секции event срабатывает при каждом подключении движка к базе данных. Оно позволяет выполнить дополнительную настройку соединения, например, установить параметры сессии или выполнить инициализирующие SQL-запросы. Первым параметром обработчик принимает объект соединения Connection, который можно использовать для выполнения команд.

Событие удобно для централизованной настройки всех новых соединений, например, для включения внешних ключей в SQLite или установки часового пояса.

Синтаксис

from sqlalchemy import event @event.listens_for(engine, 'engine_connect') def handler(conn): pass

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'engine_connect') def on_connect(conn): print('Engine connected') with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"Engine connected"

Пример

Давайте при подключении включим поддержку внешних ключей в SQLite через команду PRAGMA:

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'engine_connect') def enable_foreign_keys(conn): conn.execute(text('PRAGMA foreign_keys=ON')) with engine.connect() as conn: res = conn.execute(text('PRAGMA foreign_keys')) print(res.scalar())

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

"1"

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') counter = {'n': 0} @event.listens_for(engine, 'engine_connect') def count_connections(conn): counter['n'] += 1 print(f"Connection #{counter['n']}") with engine.connect() as conn: conn.execute(text('SELECT 1')) with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"Connection #1" "Connection #2"

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

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