Функция Django isnull в Python с примерами

Функция Django isnull используется в Python для проверки того, является ли значение NULL или нет.

Введение в Django isnull

Для демонстрации мы будем использовать модели Employee и Contact из приложения HR. Модели Emloyee и Contact сопоставляются с таблицами hr_employee и hr_contact:

Знакомство с Django isnull

В реляционных базах данных NULL обозначает отсутствующую информацию. Например, если вы не знаете контакт сотрудника, вы можете использовать NULL для контакта сотрудника на момент записи.

NULL является особенным, поскольку вы не можете использовать оператор = для сравнения с ним значения. Вместо этого вы используете оператор IS.

Например, чтобы проверить, является ли значение в contact_id значением NULL, используйте оператор IS следующим образом:

contact_id IS NULL

IS NULL возвращает значение true, если contact_id равен NULL, или false в противном случае.

Чтобы отменить оператор IS, можно использовать оператор NOT следующим образом:

contact_id IS NOT NULL

Django использует isnull для проверки того, является ли значение NUL или нет:

Entity.objects.filter(field_name__isnull=True)

Метод filter() возвращает все экземпляры с field_name, равным NULL. Чтобы отрицать isnull, вы сравниваете его с False:

Entity.objects.filter(field_name__isnull=False)

В этом случае filter() возвращает все экземпляры Entity, field_name которых не равно NULL.

Пример использования isnull в Django

В следующем примере isnull используется для получения сотрудников, у которых нет контактов:

>>> Employee.objects.filter(contact_id__isnull=True)
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
  FROM "hr_employee"
 WHERE "hr_employee"."contact_id" IS NULL

Сгенерированный запрос использует оператор IS NULL для сравнения contact_id с NULL.

В следующем примере isnull используется для получения всех сотрудников, у которых есть контакты:

>>> Employee.objects.filter(contact_id__isnull=False) 
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
  FROM "hr_employee"
 WHERE "hr_employee"."contact_id" IS NOT NULL

В этом случае сгенерированный запрос использует IS NOT NULL для сравнения значений в столбце contact_id с NULL.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *