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

Исключение SQLAlchemyError

Исключение SQLAlchemyError представляет собой базовый класс для всех исключений, которые возникают при работе с библиотекой SQLAlchemy. Оно наследуется от встроенного исключения Exception и служит основой для всей иерархии ошибок SQLAlchemy. Перехватывая SQLAlchemyError, можно обработать любую ошибку библиотеки, будь то проблема с подключением, выполнением запроса или работой с сессией.

Исключение не принимает обязательных параметров при создании. Оно может быть вызвано напрямую или использовано в конструкции except для перехвата всех дочерних исключений SQLAlchemy.

Синтаксис

from sqlalchemy.exc import SQLAlchemyError raise SQLAlchemyError("error message")

Пример

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

from sqlalchemy.exc import SQLAlchemyError try: raise SQLAlchemyError("custom sqlalchemy error") except SQLAlchemyError as exc: print(type(exc).__name__) print(exc)

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

"SQLAlchemyError" "custom sqlalchemy error"

Пример

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

from sqlalchemy import create_engine, text from sqlalchemy.exc import SQLAlchemyError engine = create_engine('sqlite:///:memory:') try: with engine.connect() as conn: conn.execute(text('SELECT * FROM nonexistent_table')) except SQLAlchemyError as exc: print("caught:", type(exc).__name__)

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

"caught: OperationalError"

Пример

Давайте проверим, что дочерние исключения наследуются от SQLAlchemyError:

from sqlalchemy.exc import ( SQLAlchemyError, IntegrityError, OperationalError, ProgrammingError, DBAPIError, ) for exc_class in (IntegrityError, OperationalError, ProgrammingError, DBAPIError): print(exc_class.__name__, issubclass(exc_class, SQLAlchemyError))

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

"IntegrityError True" "OperationalError True" "ProgrammingError True" "DBAPIError True"

Пример

Давайте обработаем ошибку вставки дублирующегося первичного ключа через родительское исключение:

from sqlalchemy import create_engine, text from sqlalchemy.exc import SQLAlchemyError engine = create_engine('sqlite:///:memory:') with engine.begin() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)')) conn.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article')")) try: with engine.begin() as conn: conn.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article')")) except SQLAlchemyError as exc: print("error type:", type(exc).__name__) print("is sqlalchemy error:", isinstance(exc, SQLAlchemyError))

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

"error type: IntegrityError" "is sqlalchemy error: True"

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

  • исключение DBAPIError,
    которое оборачивает ошибки драйвера базы данных
  • исключение IntegrityError,
    которое возникает при нарушении ограничений целостности
  • исключение OperationalError,
    которое сигнализирует об ошибках работы с базой данных
  • исключение ProgrammingError,
    которое возникает при ошибках программирования SQL
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить