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

Событие after_cursor_execute

Событие after_cursor_execute из секции event срабатывает после того, как SQL-запрос был передан в курсор базы данных. Обработчик получает объект соединения, курсор, текст запроса, параметры запроса, признак множественного выполнения и контекст выполнения. Событие удобно использовать для логирования запросов, замера времени их выполнения и профилирования.

Синтаксис

from sqlalchemy import event @event.listens_for(engine, 'after_cursor_execute') def after_cursor_execute(conn, cursor, statement, parameters, context, executemany): pass

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'after_cursor_execute') def after_cursor_execute(conn, cursor, statement, parameters, context, executemany): print('statement:', statement) with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"statement: SELECT 1"

Пример

Давайте измерим время выполнения запроса с помощью события after_cursor_execute:

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') @event.listens_for(engine, 'after_cursor_execute') def after_cursor_execute(conn, cursor, statement, parameters, context, executemany): print('executed:', statement) with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)')) conn.execute(text("INSERT INTO articles (title) VALUES ('article')")) res = conn.execute(text('SELECT * FROM articles')) for row in res: print(row)

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

"executed: CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)" "executed: INSERT INTO articles (title) VALUES ('article')" "executed: SELECT * FROM articles" (1, 'article')

Пример

Давайте сохраним все выполненные запросы в список для дальнейшего анализа:

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') queries = [] @event.listens_for(engine, 'after_cursor_execute') def after_cursor_execute(conn, cursor, statement, parameters, context, executemany): queries.append(statement) with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)')) conn.execute(text("INSERT INTO articles (title) VALUES ('article')")) print(queries)

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

['CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)', "INSERT INTO articles (title) VALUES ('article')"]

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

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