Django 5 для начинающих

Прогресс по курсу:  9/1004

3.6 Django ORM, методы которые не возвращают QuerySet
2 из 7 шагов пройдено
0 из 25 баллов  получено

В данном разделе мы рассмотрим все методы, которые не возвращают QuerySet и продолжим работать с нашей моделью Worker из прошлого раздела.
 

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

  • get(): Возвращает один объект. Вызывает ошибку, если поиск возвращает несколько объектов.
  • create(): Быстрый метод создания и сохранения объекта за один шаг.
  • get_or_create(): Возвращает один объект. Если объект не существует, то он его создает.
  • update_or_create(): Обновляет один объект. Если объект не существует, то он его создает.
  • bulk_create(): Вставляет список объектов в базу данных.
  • bulk_update(): Обновляет указанные поля в списке экземпляров модели.
  • count(): Подсчитывает количество объектов в возвращаемом QuerySet. Возвращает целое число.
  • in_bulk(): Возвращает словарь, содержащий все объекты с указанными ID.
  • iterator(): Выполнение QuerySet и возвращение итератора по результатам. Может улучшить производительность и потребление памяти при запросах, возвращающих большое количество объектов.
  • latest(): Возвращает последний объект в таблице базы данных на основе заданного поля (полей).
  • earliest(): Возвращает самый ранний объект в таблице базы данных на основе заданного поля (полей).
  • first(): Возвращает первый объект в соответствующем QuerySet.
  • last(): Возвращает последний объект в соответствующем QuerySet.
  • aggregate(): Возвращает словарь агрегированных значений (средние, суммы и т.д.), рассчитанных по QuerySet.
  • exists(): Возвращает True, если QuerySet содержит какие либо результаты.
  • contains(): Метод возвращает True, если набор QuerySet содержит определенный объект, и False - если не содержит.
  • update(): Выполняет SQL оператор UPDATE в указанном поле (полях).
  • delete(): Выполняет SQL оператор DELETE, удаляющий все строки в QuerySet.
  • as_manager(): Возвращает экземпляр класса Manager, содержащий копию методов QuerySet.
  • explain(): Возвращает строку плана выполнения QuerySet. Используется для анализа выполнения запросов.

 

Подробнее о методах вы можете посмотреть в документации. Мы уже начинали работать с некоторыми методами в предыдущих разделах. Рассмотрим некоторые методы подробнее.

Запустим шелл, импортируем модели:

python manage.py shell
from orm_method.models import Worker

 

get()

Возвращает один единственный объект. Если нет совпадения результатов, это вызовет исключение DoesNotExist. Если запросу get() соответствует более одного элемента, это вызовет исключение MultipleObjects.

Worker.objects.get(id=1)

 

create()

Удобный метод создания объекта и его сохранения за один шаг.

Worker.objects.create(first_name='John', last_name='Connor', age=49, work_experience=12)

 

get_or_create()

Метод будет пытаться извлечь запись, соответствующую полям поиска. Если записи не существует, то она будет создана.

Возвращаемое значение будет кортежем, в котором будет содержаться созданный или извлеченный объект, а также булевым значением, которое будет True, если была создана новая запись:

Worker.objects.get_or_create(first_name='John', last_name='Doe', age=31, work_experience='8')


Если мы попробуем повторить выполнение данного кода, то получим:

 

update_or_create()

Работает аналогично get_or_create(), за исключением того, что вы, дополнительно, передаёте словарь defaults, содержащий поля для обновления.

Если запись существует, метод обновит её поля, заданные в словаре defaults:

Worker.objects.update_or_create(first_name='John', last_name='Doe', defaults={'age': 32, 'work_experience': 9})


Если запись не существует, метод сначала сначала создаст её, а затем обновит её поля, заданные в словаре defaults:

Worker.objects.update_or_create(first_name='John', last_name='Smith', defaults={'last_name': 'Def', 'age': 32, 'work_experience': 9})

В данном примере, в итоге, была создана запись с фамилией Def, а не Smith.


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

Понравилась задача, тест или урок? Поставьте лайк, поддержите курс. Ваша поддержка очень важна для нас.

update_or_create() --- информация про get_or_create()

@Полина_Пелеева, Спасибо, исправили.

@Илья_Перминов, Думаю стоит указать про атрибут defaults, которому передается словарь данных, которые необходимо обновить. Иначе не понятно, чем он отличается от get_or_create. 

@Буган_Рамазанов, спасибо за замечание, добавил.

Методы update_or_create() и get_or_create() в Django ORM предназначены для работы с единственными записями в базе данных. Если при вызове этих методов параметрам соответствует несколько записей, то это приведет к ошибке MultipleObjectsReturned

orm_method.models.Worker.MultipleObjectsReturned: get() returned more than one Worker -- it returned 3!