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