Событие 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,
которое срабатывает при извлечении соединения из пула