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

ProgrammingError

Исключение ProgrammingError наследуется от DatabaseError и возникает в Django при выполнении некорректного SQL-запроса. Обычно это связано с синтаксическими ошибками в SQL, обращением к несуществующим таблицам или полям, а также с неправильным использованием параметров запроса.

Это исключение оборачивает соответствующее исключение драйвера базы данных и позволяет единообразно обрабатывать ошибки программирования независимо от используемой СУБД.

Синтаксис

from django.db import ProgrammingError try: # Код, который может вызвать ошибку pass except ProgrammingError as e: # Обработка ошибки программирования print(f"SQL error: {e}")

Пример

Рассмотрим ошибку при обращении к несуществующему полю модели:

from django.db import ProgrammingError from myapp.models import Article try: # Поле 'non_existent_field' не существует в модели Article articles = Article.objects.filter(non_existent_field='value') print(articles) except ProgrammingError as e: print(f"Error: {e}")

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

"Error: column myapp_article.non_existent_field does not exist"

Пример

Ошибка также возникает при использовании неверного синтаксиса в сырых SQL-запросах:

from django.db import connection, ProgrammingError try: with connection.cursor() as cursor: # Некорректный SQL-запрос с ошибкой в синтаксисе cursor.execute("SELECT * FORM myapp_article") rows = cursor.fetchall() except ProgrammingError as e: print(f"SQL syntax error: {e}")

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

"SQL syntax error: syntax error at or near \"FORM\""

Пример

Обработка ошибки при использовании неправильного имени таблицы в запросе:

from django.db import connection, ProgrammingError try: with connection.cursor() as cursor: # Таблица 'non_existent_table' не существует cursor.execute("SELECT * FROM non_existent_table") rows = cursor.fetchall() except ProgrammingError as e: print(f"Table error: {e}")

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

"Table error: relation \"non_existent_table\" does not exist"

Пример

Использование транзакции для безопасного выполнения операций с возможным возникновением ProgrammingError:

from django.db import transaction, ProgrammingError from myapp.models import Article try: with transaction.atomic(): # Ошибочный запрос внутри транзакции articles = Article.objects.filter(invalid_field__contains='test') for article in articles: print(article.title) except ProgrammingError as e: print(f"Transaction failed: {e}") # Транзакция автоматически откатится

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

  • исключение IntegrityError,
    которое возникает при нарушении целостности данных
  • исключение OperationalError,
    которое связано с ошибками подключения к БД
  • исключение DataError,
    которое возникает при несоответствии типов данных
  • исключение FieldError,
    которое связано с ошибками в полях модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить