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

Исключение CompileError

Исключение CompileError наследуется от SQLAlchemyError и возникает, когда SQLAlchemy не может скомпилировать SQL-выражение для конкретного диалекта базы данных. Это может произойти при использовании неподдерживаемых конструкций, некорректных имен столбцов или таблиц, а также при работе с диалектами, которые не поддерживают определенные возможности SQL.

Синтаксис

from sqlalchemy.exc import CompileError try: # compilation code pass except CompileError as e: print(e)

Пример

Давайте попробуем скомпилировать выражение с несуществующим именем таблицы и перехватим исключение CompileError:

from sqlalchemy import create_engine, text from sqlalchemy.exc import CompileError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: try: res = conn.execute(text('SELECT * FROM unknown_table')) except CompileError as e: print('CompileError:', e)

Пример

Давайте создадим модель с недопустимым типом столбца и попробуем создать таблицу:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.exc import CompileError class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') try: Base.metadata.create_all(engine) print('Tables created successfully') except CompileError as e: print('CompileError:', e)

Пример

Давайте попробуем использовать функцию func с несуществующей SQL-функцией и обработаем исключение:

from sqlalchemy import create_engine, select, func from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.exc import CompileError class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: try: stmt = select(func.nonexistent_function(Article.id)) res = session.execute(stmt).all() print(res) except CompileError as e: print('CompileError:', e)

Пример

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

from sqlalchemy import create_engine, text from sqlalchemy.exc import SQLAlchemyError, CompileError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: try: res = conn.execute(text('SELECT invalid syntax')) except SQLAlchemyError as e: print('Caught:', type(e).__name__) print('Is CompileError:', isinstance(e, CompileError))

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

  • исключение SQLAlchemyError,
    которое является базовым для всех исключений SQLAlchemy
  • исключение UnsupportedCompilationError,
    которое возникает при неподдерживаемой компиляции
  • исключение StatementError,
    которое оборачивает ошибки выполнения SQL-выражений
  • исключение ProgrammingError,
    которое возникает при ошибках программирования в SQL
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить