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

Исключение UnsupportedCompilationError

Исключение UnsupportedCompilationError наследуется от CompileError и возникает, когда компилятор SQLAlchemy не может преобразовать конструкцию запроса в SQL-код, понятный конкретному диалекту базы данных. Это может произойти при использовании функции или оператора, который не поддерживается выбранной СУБД. Исключение принимает объект компилятора и сообщение с деталями ошибки.

Синтаксис

UnsupportedCompilationError(compiler, message)

Пример

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

from sqlalchemy import create_engine, select, func from sqlalchemy.exc import UnsupportedCompilationError engine = create_engine('sqlite:///:memory:') stmt = select(func.concat('article', 'user')) try: compiled = stmt.compile(dialect=engine.dialect) print(compiled) except UnsupportedCompilationError as exc: print("UnsupportedCompilationError:", exc)

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

"UnsupportedCompilationError: (sqlalchemy.dialects.sqlite.base.SQLiteCompiler) Compiler can't render element of type <class 'sqlalchemy.sql.functions.concat'>"

Пример

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

from sqlalchemy import create_engine, select, func from sqlalchemy.exc import UnsupportedCompilationError engine = create_engine('sqlite:///:memory:') stmt = select(func.concat('article', 'user')) try: stmt.compile(dialect=engine.dialect) except UnsupportedCompilationError as exc: print("compiler:", exc.compiler) print("message:", exc.message if hasattr(exc, 'message') else exc)

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

"compiler: <sqlalchemy.dialects.sqlite.base.SQLiteCompiler object at 0x...>" "message: Compiler can't render element of type <class 'sqlalchemy.sql.functions.concat'>"

Пример

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

from sqlalchemy import create_engine, text from sqlalchemy.exc import UnsupportedCompilationError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: try: res = conn.execute(text('SELECT 1')) print(res.fetchall()) except UnsupportedCompilationError as exc: print("UnsupportedCompilationError:", exc)

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

[(1,)]

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

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