Вставка, обновление и удаление данных в Django ORM

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 []>
Рейтинг: 5

2023-10-23 / / 0 комментариев / Про кодинг и сервер / ,