Django ORM Flashcards

1
Q

Какая основная задача ORM?

A

Отображение объектов в коде на таблицы в базе данных и обратно

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Как соотносятся таблицы в реляционной базе данных и модели в коде?

A

На каждую таблицу создается своя модель

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Для чего нужны миграции?

A

Миграции – единственный правильный способ вносить изменения в структуру базы данных

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как соотносятся между собой объект и таблица в базе данных?

A

Каждый объект соответствует одной строке в таблице базы данных

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Если цепочка вызовов содержит несколько вызовов .filter(), то…

A

условия объединятся через “AND”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Если цепочка вызовов содержит несколько вызовов .order_by(), то…

A

будет учтён только последний

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Методы QuerySet вроде .filter() и .order_by()…

A

не изменяют состояние объекта QuerySet

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Важен ли порядок в котором вызываются методы билдера?

A

Нет. Порядок определяется при формировании самого запроса внутри ORM

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Как правильно построить условие WHERE

A

users = User.objects.filter(id\_\_in=[1, 2])

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Какие способы подойдут для того, чтобы получить список всех пользователей?

A
users = list(User.objects.all())
---------------
users = []
for user in User.objects.all():
    users.append(user)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Для чего нужно определять связи на уровне ORM?

A

Это позволяет получать зависимости сущностей через методы самой сущности

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Если в модели A описано поле типа ForeignKey(B) и при этом не указана опция on_delete, то удаление некоторого объекта модели B, с которым связанно ненулевое количество объектов модели A…

A

… вызовет ошибку (данные в БД не будут затронуты)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Аннотирование и дубликаты в выдаче

A

а не добавляет ли OUTER JOIN, который можно заметить в примере выше, в выборку дублирующиеся элементы, если присовокупляемые сущности соотносятся с текущей как “многие к одному”? Добавляет! Более того, агрегация в таких случаях даёт неверные результаты, так как учитывает и повторяющиеся строки

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Использование аннотации для подсчета без дублирования

A

агрегирующая функция Count имеет опцию distinct=True, которая убирает дублирование, пока вы используете только этот вид аннотаций и каждый Count используете с distinct=True

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Где можно использовать аннотированные поля?

A

Поля, добавляемые аннотированием, можно использовать не только для агрегации, но и для фильтрации с сортировкой, и даже в последующих аннотациях — везде, где можно использовать обычные поля.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Когда требуется запросить некое итоговое вычисляемое значение (одно), что вы используете?

A

Когда требуется запросить некое итоговое вычисляемое значение (одно), что вы используете?

17
Q

Когда требуется запросить посты блога, отсортировав по количеству комментариев, что вы используете?

A

аннотацию, затем .order_by()

18
Q

Какое имя получит ключ словаря с результатами агрегации?

Post.objects.annotate(cmnt=Count(‘postcomment’)).aggregate(Sum(‘cmnt’))`

A

cmnt__sum

19
Q

В роли чего можно использовать функцию atomic?

A

менеджера контекста
декоратора

20
Q

Что произойдёт, если функцию, которая была помечена как атомарная с помощью atomic, вызвать в рамках уже созданной транзакции?

A

возможно будет создана точка сохранения;
изменения сразу попадут в базу при использовании некоторых СУБД

21
Q

Какой из вариантов кода правильно откатывает транзакцию?

A
with transaction.atomic():
    if not ...:
        rollback()
...
22
Q

Если вам нужна пара полей, но не сама модель, вы возьмёте…

A

.values_list()

23
Q

Если вам нужны не все поля, но с методами модели работать хочется, вы возьмёте…

A

.only()

24
Q

Показать список миграций

A

python manage.py showmigrations

25
Q
A