Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
681 of 711 menu
◀ ▶

Исключение DBAPIError

Исключение DBAPIError возбуждается, когда драйвер базы данных (DBAPI) сообщает об ошибке во время выполнения запроса. Это базовое исключение для ошибок соединения, синтаксиса SQL, нарушения прав доступа и других проблем, пришедших непосредственно от СУБД. Атрибут orig хранит исходное исключение драйвера, statement содержит текст выполненного запроса, а params - переданные параметры.

Синтаксис

from sqlalchemy.exc import DBAPIError try: # выполнение запроса pass except DBAPIError as e: print(e)

Пример

Давайте попробуем выполнить запрос к несуществующей таблице и поймаем исключение DBAPIError:

from sqlalchemy import create_engine, text from sqlalchemy.exc import DBAPIError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: try: conn.execute(text('SELECT * FROM unknown_table')) except DBAPIError as e: print(type(e).__name__) print(e.orig)

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

"DBAPIError" "no such table: unknown_table"

Пример

Давайте выведем атрибут statement, чтобы увидеть SQL-запрос, вызвавший ошибку:

from sqlalchemy import create_engine, text from sqlalchemy.exc import DBAPIError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: try: conn.execute(text('SELECT * FROM unknown_table')) except DBAPIError as e: print(e.statement)

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

"SELECT * FROM unknown_table"

Пример

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

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

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

"IntegrityError" "True"

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

  • исключение SQLAlchemyError,
    которое является базовым для всех исключений библиотеки
  • исключение IntegrityError,
    которое возникает при нарушении целостности данных
  • исключение OperationalError,
    которое сигнализирует о проблемах работы самой СУБД
  • исключение ProgrammingError,
    которое возникает при ошибках в SQL-коде
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить