Исключение StatementError
Исключение StatementError возбуждается в тех случаях,
когда SQLAlchemy не может корректно выполнить SQL-выражение
или оператор. Оно обычно оборачивает исходную ошибку драйвера
базы данных и содержит дополнительную информацию о самом
выражении. Первым параметром передаётся текст сообщения
об ошибке, вторым - исходное исключение, третьим - объект
выражения, вызвавшего сбой.
Синтаксис
StatementError(message, original_exception=None, params=None)
Пример
Давайте попробуем выполнить запрос с несуществующей таблицей и перехватим исключение:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import StatementError
engine = create_engine('sqlite:///:memory:')
try:
with engine.connect() as conn:
conn.execute(text('SELECT * FROM articles'))
except StatementError as err:
print(type(err).__name__)
Результат выполнения кода:
"StatementError"
Пример
Исключение содержит исходную ошибку драйвера.
Давайте выведем её атрибут orig:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import StatementError
engine = create_engine('sqlite:///:memory:')
try:
with engine.connect() as conn:
conn.execute(text('SELECT * FROM articles'))
except StatementError as err:
print(type(err.orig).__name__)
Результат выполнения кода:
"OperationalError"
Пример
Давайте выведем полный текст сообщения об ошибке:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import StatementError
engine = create_engine('sqlite:///:memory:')
try:
with engine.connect() as conn:
conn.execute(text('SELECT * FROM articles'))
except StatementError as err:
print(str(err).splitlines()[0])
Результат выполнения кода:
"(sqlite3.OperationalError) no such table: articles"
Смотрите также
-
класс
SQLAlchemyError,
который является базовым исключением SQLAlchemy -
класс
DBAPIError,
который оборачивает ошибки драйвера базы данных -
класс
OperationalError,
который возникает при ошибках работы с базой -
класс
ResourceClosedError,
который возникает при работе с закрытым соединением