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

Исключение InterfaceError

Исключение InterfaceError в SQLAlchemy представляет ошибку, возникающую на уровне интерфейса драйвера базы данных. Оно не связано с ошибкой самого SQL-запроса, а указывает на проблему в программном интерфейсе между SQLAlchemy и низкоуровневым DBAPI-драйвером. Исключение наследуется от класса DBAPIError и, следовательно, от базового класса SQLAlchemyError.

Причиной InterfaceError обычно становятся: некорректное использование курсора, обращение к закрытому соединению, несовместимость версии драйвера или передача в драйвер значений неподдерживаемого типа. Параметров у самого класса нет - атрибуты исключения формируются драйвером и включают текст сообщения, исходное исключение DBAPI и объект соединения.

Синтаксис

from sqlalchemy.exc import InterfaceError raise InterfaceError(statement, params, orig, connection_invalidated=False)

Пример

Давайте импортируем исключение и проверим его место в иерархии классов SQLAlchemy:

from sqlalchemy.exc import InterfaceError, DBAPIError, SQLAlchemyError print(issubclass(InterfaceError, DBAPIError)) print(issubclass(InterfaceError, SQLAlchemyError)) print(issubclass(InterfaceError, Exception))

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

True True True

Пример

Давайте попробуем выполнить запрос на уже закрытом соединении. Драйвер SQLite возбудит исключение, которое SQLAlchemy обернет в InterfaceError:

<+python+> from sqlalchemy import create_engine, text from sqlalchemy.exc import InterfaceError engine = create_engine('sqlite:///:memory:') conn = engine.connect() conn.close() try: conn.execute(text('SELECT 1')) except InterfaceError as err: print('InterfaceError caught') print(type(err.orig).__name__) <-python+>

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

InterfaceError caught ProgrammingError

Пример

Давайте перехватим InterfaceError как более общий DBAPIError и выведем текст исходного исключения драйвера:

from sqlalchemy import create_engine, text from sqlalchemy.exc import DBAPIError engine = create_engine('sqlite:///:memory:') conn = engine.connect() conn.close() try: conn.execute(text('SELECT 1')) except DBAPIError as err: print('DBAPIError caught') print('is instance of DBAPIError')

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

DBAPIError caught is instance of DBAPIError

Пример

Давайте поработаем с таблицей articles и покажем, что корректный запрос не возбуждает InterfaceError, а исключение появляется только при проблемах интерфейса драйвера:

from sqlalchemy import create_engine, text from sqlalchemy.exc import InterfaceError 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 (title) VALUES ('article')")) conn.commit() try: res = conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) except InterfaceError as err: print('InterfaceError:', err)

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

[('article',)]

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

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