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

Событие connect

Событие connect из секции event срабатывает в момент установки нового соединения с базой данных. Обработчик получает объект соединения и может выполнить дополнительную настройку: установить параметры сессии, включить расширения СУБД или зарегистрировать пользовательские функции.

Первым параметром обработчик принимает объект DBAPIConnection - низкоуровневое соединение драйвера базы данных. Через него можно получить курсор и выполнить произвольные SQL-инструкции до того, как соединение будет передано в пул.

Синтаксис

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

Пример

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

from sqlalchemy import create_engine, event engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'connect') def on_connect(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute('PRAGMA foreign_keys=ON') cursor.close() with engine.connect() as conn: res = conn.exec_driver_sql('PRAGMA foreign_keys') print(res.fetchone())

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

(1,)

Пример

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

<+python+> from sqlalchemy import create_engine, event engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'connect') def on_connect(dbapi_connection, connection_record): print('new connection established') with engine.connect() as conn: conn.exec_driver_sql('SELECT 1') <-python+>

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

"new connection established"

Пример

Давайте зарегистрируем пользовательскую SQL-функцию при подключении к базе данных:

from sqlalchemy import create_engine, event engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'connect') def on_connect(dbapi_connection, connection_record): dbapi_connection.create_function( 'to_upper', 1, lambda value: value.upper() if value else value, ) with engine.connect() as conn: res = conn.exec_driver_sql("SELECT to_upper('article')") print(res.fetchone())

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

('ARTICLE',)

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

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