Исключение 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-коде