Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

2.5 Методы возвращающие QuerySet
6 из 6 шагов пройдено

QuerySets — это фундаментальная концепция Django ORM (Object Relational Mapper), которая используется для извлечения данных из базы данных. Наборы запросов позволяют получить список объектов из таблицы базы данных, отвечающих определенным критериям. В этом разделе мы более подробно рассмотрим QuerySets в Django и то, как они работают.

Django QuerySet — это список объектов из таблицы базы данных, соответствующих определенным критериям. Наборы запросов позволяют фильтровать, упорядочивать и нарезать данные различными способами. Они также поддерживают объединение нескольких методов для создания сложных запросов.

QuerySet оцениваются лениво, что означает, что запрос к базе данных не выполняется до тех пор, пока не будет вызван QuerySet. Это позволяет создавать сложные запросы без ненужного обращения к базе данных.

В данном разделе мы рассмотрим все методы QuerySet и продолжим работать с нашей моделью:

from django.db import models
from django.utils import timezone


class Compensation(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name


class Contact(models.Model):
    phone = models.CharField(max_length=50, unique=True)
    address = models.CharField(max_length=50)

    def __str__(self):
        return self.phone


class Department(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.name


class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    age = models.SmallIntegerField(null=True)
    created = models.DateTimeField(default=timezone.now)
    work_experience = models.SmallIntegerField(default=0)
    contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)
    department = models.ForeignKey(Department, on_delete=models.CASCADE, default=None)
    compensations = models.ManyToManyField(Compensation)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

 

Методы возвращающие QuerySet

  • filter(): Фильтр по заданным параметрам поиска. Несколько  параметров объединяются операторами SQL AND.
  • exclude(): Фильтр по объектам, которые не соответствуют заданным параметрам поиска.
  • annotate(): Аннотирует каждый объект в QuerySet. Аннотации могут быть простыми значениями, ссылкой на поле или агрегированным выражением.
  • alias(): То же, что annotate(), но вместо аннотирования объектов в QuerySet, сохраняет выражение для последующего повторного использования с другими QuerySet методами.
  • order_by(): Изменение сортировки QuerySet по умолчанию.
  • reverse(): Сортирует QuerySet по умолчанию в обратном порядке.
  • distinct(): Выполнение SQL запроса SELECT DISTINCT для устранения дублирующихся строк.
  • values(): Возвращает словари вместо экземпляров моделей.
  • values_list(): Возвращает кортежи вместо экземпляров модели.
  • dates(): Возвращает QuerySet, содержащий все доступные даты в указанном диапазоне дат.
  • datetimes(): Возвращает QuerySet, содержащий все доступные даты в указанном диапазоне дат и времени.
  • none(): Создает пустой QuerySet.
  • all(): Возвращает копию текущего QuerySet-а.
  • union(): Использует SQL оператор UNION для объединения двух или более QuerySet.
  • intersection(): Использует SQL оператор INTERSECT для возврата общих элементов двух или более QuerySet.
  • difference(): Использует SQL оператор EXCEPT для возврата элементов первичного QuerySet которых нет в других.
  • select_related(): Выборка всех связанных данных при выполнении запроса (за исключением отношений многие-ко-многим).
  • prefetch_related(): Выборка всех связанных данных при выполнении запроса related()(включая отношения многие-ко-многим).
  • extra(): Метод используется для переименования столбцов в ORM.
  • defer(): Не извлекает указанные поля из БД. Используется для улучшения производительности запросов со сложными наборами данных.
  • only(): Противоположность метода defer() - возвращает только указанные поля.
  • using(): Выбирает, в какой базе данных будет оцениваться QuerySet(при использовании нескольких баз данных).
  • select_for_update(): Возвращает QuerySet и блокирует строки таблицы до завершения транзакции.
  • raw(): Выполняет исходный SQL оператор.
  • &: Комбинирует два QuerySet с помощью SQL оператора AND.
  • |: Комбинирует два QuerySet с помощью SQL оператора OR.
  • ^: Комбинирует два QuerySet с помощью SQL оператора XOR.

Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

честно сказать такое себе, в прошлом курсе именно все это было уже, зачем оно тут, я не понимаю!

@No_Name, Данный раздел используется для повторения. В первом курсе были не все методы, также не было Q и F объектов, мета классов, абстрактных моделей.