В данном разделе мы рассмотрим все методы, которые не возвращают 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
.