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

Исключение NoSuchColumnError

Исключение NoSuchColumnError наследуется от SQLAlchemyError и возбуждается, когда код пытается получить доступ к столбцу, которого нет в результате выполнения запроса. Чаще всего это происходит при работе с объектом Row или CursorResult, когда имя столбца указано с опечаткой либо столбец не был включен в SELECT-список. Исключение не принимает дополнительных параметров и содержит сообщение с именем отсутствующего столбца.

Синтаксис

NoSuchColumnError(statement, params, orig)

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article')")) conn.commit() res = conn.execute(text('SELECT id, title FROM articles')) row = res.first() print(row.title) print(row.text)

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

article Traceback (most recent call last): ... sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'text'"

Пример

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

from sqlalchemy import create_engine, text from sqlalchemy.exc import NoSuchColumnError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article')")) conn.commit() res = conn.execute(text('SELECT id, title FROM articles')) row = res.first() try: print(row.status) except NoSuchColumnError as exc: print('column missing:', exc)

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

"column missing: Could not locate column in row for column 'status'"

Пример

Давайте проверим наличие столбца через атрибут _mapping перед обращением к нему:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT, num INTEGER)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article', 10)")) conn.commit() res = conn.execute(text('SELECT id, title, num FROM articles')) row = res.first() for name in ('id', 'title', 'text'): if name in row._mapping: print(name, '=', row._mapping[name]) else: print(name, 'not found')

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

id = 1 title = article text not found

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

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