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

Функция event.contains

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

Синтаксис

event.contains(target, identifier, fn)

Пример

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

from sqlalchemy import create_engine, event 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) res = event.contains(engine, 'before_cursor_execute', before_cursor_execute) print(res)

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

True

Пример

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

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

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

False

Пример

Давайте удалим слушатель через event.remove и убедимся, что event.contains теперь возвращает False:

from sqlalchemy import create_engine, event 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) print(event.contains(engine, 'before_cursor_execute', before_cursor_execute)) event.remove(engine, 'before_cursor_execute', before_cursor_execute) print(event.contains(engine, 'before_cursor_execute', before_cursor_execute))

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

True False

Пример

Давайте проверим слушатель, зарегистрированный для класса-модели Article на событие before_insert:

from sqlalchemy import create_engine, event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column 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) res = event.contains(Article, 'before_insert', before_insert) print(res)

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

True

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

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