Django 5 для начинающих

Прогресс по курсу:  9/1004

3.3 Первые ORM запросы (CRUD)
4 из 15 шагов пройдено
0 из 49 баллов  получено

Манипуляция с данными в Django на основе CRUD

Аббревиатура CRUD обозначает четыре основные операции, которые используются при работе с базами данных. Этот термин представляет собой сочетание первых букв английских слов: создание (Create), чтение (Read), модификация (Update) и удаление (Delete). Это, по своей сути, стандартная классификация функций для манипуляций с данными.

В SQL этим функциям соответствуют операторы: Insert(создание записей), Select(чтение записей), Update(редактирование записей) и Delete(удаление записей).

В Django при создании моделей данных они наследуют свое поведение от класса django.db.models.Model, который предоставляет базовые операции с данными (добавление, чтение, обновление и удаление).

Рассмотрим выполнение этих операций с данными на примере модели Post, которая была создана в проекте Course_SecondProject:

from django.db import models


class Post(models.Model):
    text = models.TextField()

    def __str__(self):
        return self.text[:50]

Зайдем в наш проект, и в терминале введем:

python manage.py shell

И далее все команды будем выполнять в этом шелле. Первым делом нам нужно импортировать туда нашу модель:

from posts.models import Post

Теперь можно продолжать выполнять команды. Мы можем посмотреть нашу таблицу через SQLiteStudio, или если мы работаем в PyCharm Professional то можем легко посмотреть содержимое нашей таблицы. На данный момент у нас одна запись в БД.

Все запросы мы будем выполнять используя менеджер по умолчанию (objects). Добавление кастомных менеджеров мы рассмотрим на примере блога, далее по курсу.

Добавление данных в БД

В Django для добавления данных в БД можно использовать следующие методы:

  1. create()
  2. save()
  3. get_or_create()

Для добавления данных методом create() для нашей модели можно использовать следующий код:

second_post = Post.objects.create(text='Мой второй текст в БД')

Проверим БД.

Теперь second_post содержит объект модели Post, и мы можем обращаться к его полям:

>>> second_post
<Post: Мой второй текст в БД>
>>> type(second_post)
<class 'posts.models.Post'>
>>> second_post.id
2
>>> second_post.text
'Мой второй текст в БД'

Однако, в своей сути, метод create использует другой метод - save, и его мы также можем использовать самостоятельно для добавления объекта в БД:

>>> third_post = Post(text='Моя третья запись в БД')
>>> third_post.save()

После успешного добавления данных в БД можно аналогично получить идентификатор добавленной записи - через third_post.id и сами добавленные значения - через third_post.text .

Также существует метод get_or_create(), он сначала ищет объект с заданными параметрами и создает егоесли он не найден. О нем мы поговорим в следующих разделах.


  • Комментариев
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Комментарий закреплён

Понравилась задача, тест или урок? Поставьте лайк, поддержите курс. Ваша поддержка очень важна для нас.

Я ранее где-то в комментариях уже отправлял, для тех кто в VSCode работает есть экстеншен(дополнение) -  SQLite, он все еще хорошо справляется с тем, что требуется)

@Нарбеков_Марсель, добавлю ссылку на ваш комментарий - https://stepik.org/lesson/1146708/step/2?discussion=9176285

А можете объяснить как посмотреть таблицу через SQLiteStudio?

@Daniil_Nagapetyan, посмотрите этот комментарий: https://stepik.org/lesson/1146710/step/1?discussion=8779045&unit=1158608

@Дмитрий_Селезнев, спасибо

Картинки в лекции отвалились

UPD c vpn работают

Изменен Robert Ford

@Robert_Ford, видимо проводятся работы на одном из серверов степика, скоро исправят.
В этом курсе нет картинок на сторонних серверах, они все загружены на степик.

Можно пару слов о том как использовать SQLite для тех кто не использует пайчарм? 

Должно ли что-то тут обновляться после ввода через терминал или это как-то надо самому делать?

@Дмитрий_Чекмасов, у вас выбрана вкладка структура, кликните на вкладку данные.

@Дмитрий_Селезнев, точно, все записи есть ) спасибо

@Дмитрий_Чекмасов, решение #1108061543 было практически верное, только в нём необходимо создать новый объект класса Category() (n = Category()), а не получать первый(с id=1).

@Дмитрий_Селезнев, спасибо. почему-то было не очевидно, что нужно просто создать экземпляр класса, у которого по итогу будет метод save для БД