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

Функция event.remove

Функция event.remove удаляет обработчик события, который был ранее зарегистрирован через event.listen или event.listens_for. Первым параметром передается цель прослушивания (движок, класс или метаданные). Вторым параметром - имя события. Третьим параметром - функция-обработчик, которую нужно удалить. Если обработчик не найден, функция возвращает False, иначе - True.

Синтаксис

event.remove(target, identifier, fn)

Пример

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

from sqlalchemy import create_engine, event, text engine = create_engine('sqlite:///:memory:') def before_cursor_execute(conn, cursor, statement, parameters, context, executemany): print('SQL:', statement) event.listen(engine, 'before_cursor_execute', before_cursor_execute) removed = event.remove(engine, 'before_cursor_execute', before_cursor_execute) print('Removed:', removed) with engine.connect() as conn: conn.execute(text('SELECT 1'))

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

"Removed: True"

Как видно, после удаления обработчика SQL-запрос не выводится в консоль.

Пример

Давайте попробуем удалить обработчик, который не был зарегистрирован. Функция вернет False:

from sqlalchemy import create_engine, event engine = create_engine('sqlite:///:memory:') def handler(conn, cursor, statement, parameters, context, executemany): pass res = event.remove(engine, 'before_cursor_execute', handler) print(res)

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

"False"

Пример

Давайте удалим обработчик события у класса модели. Сначала зарегистрируем его через event.listen, а затем удалим:

from sqlalchemy import create_engine, event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) def before_insert(mapper, connection, target): print('Inserting:', target.title) event.listen(Article, 'before_insert', before_insert) with Session(engine) as session: session.add(Article(title='article')) session.commit() event.remove(Article, 'before_insert', before_insert) with Session(engine) as session: session.add(Article(title='article 2')) session.commit()

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

"Inserting: article"

После удаления обработчика вторая вставка не сопровождается выводом в консоль.

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

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