DatabaseError

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

В Django исключение DatabaseError служит родительским классом для более конкретных исключений базы данных, таких как IntegrityError, OperationalError и ProgrammingError. Оно доступно через модуль django.db и может быть перехвачено в коде для обработки различных ситуаций, связанных с ошибками базы данных.

Синтаксис

pythonfrom django.db import DatabaseError

try:
  # Код, работающий с базой данных
  pass
except DatabaseError as e:
  # Обработка ошибки базы данных
  print(f"Database error: {e}")

Пример

Рассмотрим пример обработки ошибки при сохранении модели с нарушением уникальности:

pythonfrom django.db import DatabaseError
from myapp.models import User

try:
  user = User(username='john_doe', email='john@example.com')
  user.save()
except DatabaseError as e:
  print(f"Failed to save user: {e}")

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

python"Failed to save user: UNIQUE constraint failed: user.username"

Пример

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

pythonfrom django.db import DatabaseError, connection
from myapp.models import Product

try:
  with connection.cursor() as cursor:
    cursor.execute("SELECT * FROM products WHERE price < 0")
    products = cursor.fetchall()
except DatabaseError as e:
  print(f"Query execution failed: {e}")
  products = []

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

python"Query execution failed: no such table: products"

Пример

Обработка ошибок при работе с транзакциями в Django:

pythonfrom django.db import DatabaseError, transaction
from myapp.models import Order, Product

try:
  with transaction.atomic():
    order = Order.objects.create(customer='John Doe')
    product = Product.objects.get(id=999)
    order.products.add(product)
except DatabaseError as e:
  print(f"Transaction failed: {e}")
  print("Rolling back changes...")

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

python"Transaction failed: Product matching query does not exist."
"Rolling back changes..."

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

  • исключение IntegrityError,
    которое возникает при нарушении целостности данных в базе
  • исключение OperationalError,
    которое связано с проблемами подключения и выполнения операций
  • исключение ProgrammingError,
    которое возникает при ошибках в синтаксисе SQL-запросов
  • исключение DataError,
    которое связано с несоответствием типов данных в запросах