Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 24, 2015 19:15:24

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

ORM: скорость запросов и SQL-код

Имеем две связанные таблицы (неважно, один-к-одному, один-ко-многим или много-ко-кногим). К примеру, пользователи и группы.

...
class Group()
    user = FK (User)
...

Загружаем конкретного пользователя.
user = User.objects.get(id=0)


Задача: получить все группы, на которые подписан наш пользователь. Два варианта:

1)
my_groups = user.group_set.all()

2)
my_grous = Group.objects.filter(user=user)


Два вопроса:
- какой из двух вараинтов будет работать быстрее?
- одинаковый ли будет SQL-код у этих двух запросов?

Отредактировано hdj (Апрель 24, 2015 19:50:04)

Офлайн

#2 Апрель 24, 2015 20:32:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

ORM: скорость запросов и SQL-код

1. А возьми, да и по проверь.
2. А возьми, да и проверь (print Group.objects.filter(user=user).query)



Офлайн

#3 Апрель 26, 2015 10:06:37

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

ORM: скорость запросов и SQL-код

Ну, короче, такой код:

custom_groups = user.group_set.all()
custom_groups_2 = Group.objects.filter(user=user)
s = ''
s += str(custom_groups.query)
s += '<br>' + '<br>' + '<br>'
s += str(custom_groups_2.query)
return HttpResponse(s)

даёт одинаковый результат:

SELECT "tube_account_group"."id", "tube_account_group"."url", "tube_account_group"."url_id", "tube_account_group"."url_type", "tube_account_group"."url_title", "tube_account_group"."user_id" FROM "tube_account_group" WHERE "tube_account_group"."user_id" = 1
SELECT "tube_account_group"."id", "tube_account_group"."url", "tube_account_group"."url_id", "tube_account_group"."url_type", "tube_account_group"."url_title", "tube_account_group"."user_id" FROM "tube_account_group" WHERE "tube_account_group"."user_id" = 1

Походу, структура таблиц так делается, что по-другому SQL-запрос не составить.

P.S. Скорость выполнения сравнивать не стал

Отредактировано hdj (Апрель 26, 2015 19:17:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version