Найти - Пользователи
Полная версия: ORM: скорость запросов и SQL-код
Начало » Django » ORM: скорость запросов и SQL-код
1
hdj
Имеем две связанные таблицы (неважно, один-к-одному, один-ко-многим или много-ко-кногим). К примеру, пользователи и группы.
...
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-код у этих двух запросов?
FishHook
1. А возьми, да и по проверь.
2. А возьми, да и проверь (print Group.objects.filter(user=user).query)
hdj
Ну, короче, такой код:

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. Скорость выполнения сравнивать не стал
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB