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

Исключение IntegrityError

Исключение IntegrityError выбрасывается Django, когда операция с базой данных нарушает ограничения целостности, установленные на уровне модели или базы данных. Чаще всего это происходит при попытке сохранить объект с неуникальным значением для поля, имеющего атрибут unique=True, или при попытке создать запись, связанную с несуществующим объектом через внешний ключ. Исключение является подклассом DatabaseError и помогает разработчику обрабатывать ошибки, связанные с нарушением бизнес-логики на уровне данных.

Синтаксис

from django.db import IntegrityError try: # operation that may violate integrity ... except IntegrityError: # handle the error

Пример

Рассмотрим модель пользователя с уникальным адресом электронной почты. Попытка создать двух пользователей с одинаковой почтой вызовет исключение:

from django.db import models from django.db import IntegrityError class User(models.Model): name = models.CharField(max_length=100) email = models.EmailField(unique=True) # First user - saved successfully user1 = User(name="John Doe", email="john@example.com") user1.save() # Second user with the same email - raises IntegrityError try: user2 = User(name="Jane Doe", email="john@example.com") user2.save() except IntegrityError as e: print("Error:", e)

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

"Error: UNIQUE constraint failed: app_user.email"

Пример

Обработка ошибки внешнего ключа при попытке создать комментарий к несуществующей статье:

from django.db import models from django.db import IntegrityError class Article(models.Model): title = models.CharField(max_length=200) class Comment(models.Model): article = models.ForeignKey(Article, on_delete=models.CASCADE) text = models.TextField() # Try to create a comment for an article that does not exist try: comment = Comment(article_id=999, text="Great article!") comment.save() except IntegrityError as e: print("Error:", e)

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

"Error: FOREIGN KEY constraint failed"

Пример

Использование метода get_or_create для обработки нарушения уникальности без явного перехвата исключения:

from myapp.models import User # This method returns a tuple (object, created) user, created = User.objects.get_or_create( name="John Doe", email="john@example.com" ) if created: print("User was created") else: print("User already exists")

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

"User already exists"

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

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