Исключение UnmappedClassError
Исключение UnmappedClassError возникает,
когда SQLAlchemy пытается выполнить операцию
с классом, который не был зарегистрирован
в системе маппинга ORM. Это означает, что класс
не наследуется от декларативной базы
или не был связан с таблицей через функцию
mapper или реестр.
Исключение наследуется от
SQLAlchemyError и обычно сигнализирует
о том, что объект не является частью
маппированной иерархии.
Синтаксис
from sqlalchemy.orm.exc import UnmappedClassError
raise UnmappedClassError(class_, msg=None)
Пример
Давайте попробуем получить маппированный атрибут у класса, который не зарегистрирован в ORM:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from sqlalchemy.orm.exc import UnmappedClassError
class Article:
pass
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
try:
articles = session.query(Article).all()
except UnmappedClassError as e:
print(type(e).__name__)
print(e)
Результат выполнения кода:
UnmappedClassError
Class <class '__main__.Article'> is not mapped
Пример
Давайте создадим правильную модель и убедимся, что исключение больше не возникает:
Результат выполнения кода:
['article 1']
Пример
Давайте проверим состояние маппинга через инспектор и посмотрим, как исключение связано с отсутствием регистрации класса:
Результат выполнения кода:
Article -> Mapper[Article(articles)]
User -> NoInspectionAvailable
Смотрите также
-
исключение
UnmappedInstanceError,
которое возникает при работе с немаппированным экземпляром -
исключение
SQLAlchemyError,
которое является базовым для всех ошибок SQLAlchemy -
исключение
InvalidRequestError,
которое сигнализирует о некорректном запросе к ORM -
исключение
ArgumentError,
которое возникает при неверных аргументах функций