Основы работы с Django ORM
ORM (Object-Relational Mapping) в Django позволяет работать с данными в базе данных, используя объектно-ориентированный подход. Вы создаете модели данных, а Django автоматически преобразует их в SQL-запросы.
Создание объектов
Чтобы создать объект в базе данных, сначала создайте экземпляр модели, а затем вызовите метод save()
:
from myapp.models import MyModel
new_object = MyModel(name="Test", age=25)
new_object.save()
Получение объектов
Для получения объектов из базы данных используйте менеджер модели objects
. Методы, такие как all()
, filter()
и get()
, помогут вам найти нужные данные:
all_objects = MyModel.objects.all()
filtered_objects = MyModel.objects.filter(age=25)
specific_object = MyModel.objects.get(name="Test")
Обновление объектов
Чтобы обновить объект, измените атрибуты объекта и вызовите метод save()
:
object_to_update = MyModel.objects.get(name="Test")
object_to_update.age = 26
object_to_update.save()
Удаление объектов
Для удаления объекта вызовите метод delete()
:
object_to_delete = MyModel.objects.get(name="Test")
object_to_delete.delete()
Связи между моделями
Django ORM поддерживает создание связей между моделями, таких как ForeignKey, OneToOneField и ManyToManyField. Это позволяет создавать сложные структуры данных и обращаться к связанным объектам с использованием их атрибутов.
Агрегация и аннотация данных
С помощью методов annotate()
и aggregate()
можно выполнять агрегацию и аннотацию данных, что позволяет извлекать сложные статистические данные или вычислять агрегированные значения на основе данных в базе данных:
from django.db.models import Count, Avg
count_per_age = MyModel.objects.values("age").annotate(count=Count("age"))
average_age = MyModel.objects.aggregate(average_age=Avg("age"))
Использование F-выражений и Q-объектов
F-выражения и Q-объекты позволяют создавать более сложные запросы и условия фильтрации. F-выражения используются для работы с полями модели, а Q-объекты – для создания сложных условий фильтрации:
from django.db.models import F, Q
objects_with_double_age = MyModel.objects.filter(age=F("age") * 2)
filtered_objects = MyModel.objects.filter(Q(name="Test") | Q(age__gte=25))
В этой статье были рассмотрены основы работы с Django ORM, включая создание, получение, обновление и удаление объектов, а также связи между моделями, агрегацию и аннотацию данных, а также использование F-выражений и Q-объектов.