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(): Фильтр по заданным параметрам поиска. Несколько параметров объединяются операторами SQLAND.
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.