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

Событие first_connect

Событие first_connect из секции event срабатывает, когда движок впервые устанавливает соединение с базой данных. Оно вызывается только один раз за время жизни движка. Первым параметром обработчик принимает объект соединения DBAPIConnection, вторым - запись о соединении ConnectionRecord. Это событие удобно для инициализации сессии СУБД, установки параметров подключения или создания временных таблиц.

Синтаксис

from sqlalchemy import event @event.listens_for(engine, 'first_connect') def receive_first_connect(dbapi_connection, connection_record): pass

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'first_connect') def receive_first_connect(dbapi_connection, connection_record): print('first_connect fired') with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"first_connect fired"

Пример

Событие first_connect срабатывает только один раз, даже если открыть несколько соединений. Давайте убедимся в этом:

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'first_connect') def receive_first_connect(dbapi_connection, connection_record): print('first_connect fired') with engine.connect() as conn: conn.execute(text('SELECT 1')) with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"first_connect fired"

Пример

В обработчике first_connect можно выполнить SQL-запрос для настройки соединения. Давайте установим пользовательскую переменную SQLite:

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'first_connect') def receive_first_connect(dbapi_connection, connection_record): 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(res)

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

"foreign_keys enabled" "1"

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

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