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

Исключение DataError

Исключение DataError относится к подмодулю django.db и наследуется от DatabaseError. Оно возникает, когда передаваемые в запрос данные не соответствуют ожидаемому типу, формату или ограничениям поля базы данных. Например, попытка вставить слишком длинную строку в поле с ограничением по длине или передача некорректного числового значения в целочисленное поле вызывает данное исключение.

Синтаксис

from django.db import DataError from django.db import models

Пример

Рассмотрим модель Book, в которой поле 'isbn' имеет максимальную длину 13 символов. При попытке сохранить книгу с ISBN длиннее 13 символов будет выброшено исключение DataError:

from django.db import models class Book(models.Model): title = models.CharField(max_length=100) isbn = models.CharField(max_length=13) pages = models.IntegerField() # Попытка сохранить книгу с длинным ISBN book = Book( title="Django for Beginners", isbn="978-1-4493-3410-7-extra", # Длиннее 13 символов pages=350 ) try: book.save() except DataError as e: print("DataError caught:", e)

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

"DataError caught: value too long for type character varying(13)"

Пример

Исключение DataError также возникает при попытке передать некорректное значение для числового поля. Например, при сохранении числа с плавающей точкой в поле IntegerField:

from django.db import models class Product(models.Model): name = models.CharField(max_length=50) price = models.IntegerField() # Ожидает целое число # Попытка сохранить продукт с дробной ценой product = Product( name="Laptop", price=1299.99 # Дробное число для IntegerField ) try: product.save() except DataError as e: print("DataError caught:", e)

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

"DataError caught: invalid input syntax for type integer: '1299.99'"

Пример

Исключение DataError может возникнуть и при выполнении запросов на фильтрацию, если переданное значение не соответствует типу поля. Например, при попытке отфильтровать записи по числовому полю с передачей строкового значения:

from django.db import models from django.db import DataError class Employee(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() # Попытка отфильтровать сотрудников по возрасту строкой try: employees = Employee.objects.filter(age="thirty five") print(employees) except DataError as e: print("DataError caught:", e)

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

"DataError caught: invalid input syntax for type integer: 'thirty five'"

Пример

Исключение DataError также можно перехватывать вместе с более общим исключением DatabaseError для обработки любых ошибок базы данных:

from django.db import models from django.db import DatabaseError, DataError class Order(models.Model): order_id = models.CharField(max_length=20) quantity = models.IntegerField() # Обработка ошибок данных try: order = Order( order_id="ORD-12345-VERY-LONG", # Слишком длинный ID quantity="ten" # Некорректное значение для IntegerField ) order.save() except DataError as e: print("DataError caught:", e) except DatabaseError as e: print("DatabaseError caught:", e)

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

"DataError caught: value too long for type character varying(20)"

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

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