Исключение ProgrammingError
Исключение ProgrammingError относится к группе
DBAPIError и возникает при ошибках, допущенных
программистом при написании SQL-кода или работе
с объектами базы данных. К таким ошибкам относятся:
обращение к несуществующей таблице или колонке,
неверный синтаксис SQL, неправильное количество
параметров в запросе. Исключение наследуется от
DatabaseError и SQLAlchemyError.
Синтаксис
from sqlalchemy.exc import ProgrammingError
try:
# database operation
pass
except ProgrammingError as e:
print(e)
Пример
Давайте попробуем выполнить запрос к
несуществующей таблице users и поймаем
исключение:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import ProgrammingError
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
try:
conn.execute(text('SELECT * FROM users'))
except ProgrammingError as e:
print(type(e).__name__)
print(e.orig)
Результат выполнения кода:
"ProgrammingError"
"no such table: users"
Пример
Давайте создадим таблицу articles и попробуем
обратиться к несуществующей колонке:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import ProgrammingError
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
try:
conn.execute(text('SELECT missing_column FROM articles'))
except ProgrammingError as e:
print(type(e).__name__)
print(e.orig)
Результат выполнения кода:
"ProgrammingError"
"no such column: missing_column"
Пример
Давайте перехватим исключение через базовый класс
SQLAlchemyError и выведем его сообщение:
from sqlalchemy import create_engine, text
from sqlalchemy.exc import SQLAlchemyError
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
try:
conn.execute(text('INSERT INTO articles (title) VALUES (:title)'),
{'title': 'article'})
except SQLAlchemyError as e:
print(type(e).__name__)
print(str(e.orig))
Результат выполнения кода:
"ProgrammingError"
"no such table: articles"
Смотрите также
-
класс
DBAPIError,
базовый класс для ошибок уровня драйвера БД -
класс
OperationalError,
который сигнализирует об ошибках работы СУБД -
класс
IntegrityError,
который возникает при нарушении ограничений -
класс
SQLAlchemyError,
базовый класс для всех исключений SQLAlchemy