Django позволяет нам взаимодействовать с его моделями баз данных, то есть добавлять, удалять, изменять и запрашивать объекты, используя API абстракции базы данных, называемый ORM (Object Relational Mapper). В этой статье рассматриваются все полезные операции, которые мы можем выполнить с помощью Django ORM.
В демонстрационных целях мы будем использовать следующие модели Django.
class Album(models.Model):
title = models.CharField(max_length = 30)
artist = models.CharField(max_length = 30)
genre = models.CharField(max_length = 30)
def __str__(self):
return self.title
class Song(models.Model):
name = models.CharField(max_length = 100)
album = models.ForeignKey(Album, on_delete = models.CASCADE)
def __str__(self):
return self.name
Мы можем получить доступ к Django ORM, выполнив следующую команду внутри каталога нашего проекта.
python manage.py shell
Это подводит нас к интерактивной консоли Python. Предполагая, что наши модели существуют в myProject/albums/models.py
, мы можем импортировать наши модели, используя следующую команду:
>>> from books.models import Song, Album
Добавление объектов
Чтобы создать объект model Album и сохранить его в базе данных, нам нужно написать следующую команду:
>>> a = Album(title = "Divide", artist = "Ed Sheeran", genre = "Pop")
>>> a.save()
Чтобы создать объект model Song и сохранить его в базе данных, нам нужно написать следующую команду:
>>> s = Song(name = "Castle on the Hill", album = a)
>>> s.save()
Извлечение объектов
Давайте добавим еще 2 записи альбомов ради демонстрации.
>>> a = Album(title = "Abbey Road", artist = "The Beatles", genre = "Rock")
>>> a.save()
>>> a = Album(title = "Revolver", artist = "The Beatles", genre = "Rock")
>>> a.save()
Чтобы извлечь все объекты модели, мы пишем следующую команду:
>>> Album.objects.all()
<QuerySet [<Album: Divide>, <Album: Abbey Road>, <Album: Revolver>]>
Результатом является набор запросов или набор объектов, которые соответствуют запросу. Обратите внимание, что напечатанное имя является результатом __str__()
функции.
Мы также можем фильтровать запросы с помощью функций filter()
, exclude()
и get()
. filter()
Функция возвращает набор запросов, содержащий объекты, соответствующие заданным параметрам поиска.
>>> Album.objects.filter(artist = "The Beatles")
<QuerySet [<Album: Abbey Road>, <Album: Revolver>]>
exclude()
Функция возвращает набор запросов, содержащий объекты, отличные от тех, которые соответствуют заданным параметрам поиска.
>>> Album.objects.exclude(genre = "Rock")
<QuerySet [<Album: Divide>]>
get()
Функция возвращает единственный объект, который соответствует заданному параметру поиска. Выдает ошибку, когда запрос возвращает несколько объектов.
>>> Album.objects.get(pk = 3)
<QuerySet [<Album: Revolver>]>
Изменение существующих объектов
Мы можем изменить существующий объект следующим образом:
>>> a = Album.objects.get(pk = 3)
>>> a.genre = "Pop"
>>> a.save()
Удаление объектов
Чтобы удалить один объект, нам нужно написать следующие команды:
>>> a = Album.objects.get(pk = 2)
>>> a.delete()
>>> Album.objects.all()
<QuerySet [<Album: Divide>, <Album: Revolver>]>
Для удаления нескольких объектов мы можем использовать следующие функции filter()
or exclude()
:
>>> Album.objects.filter(genre = "Pop").delete()
>>> Album.objects.all()
<QuerySet []>