Что такое Django QuerySet? - PullRequest
       32

Что такое Django QuerySet?

36 голосов
/ 13 января 2011

Когда я это делаю,

>>> b = Blog.objects.all()
>>> b

Я получаю это:

>>>[<Blog: Blog Title>,<Blog: Blog Tile>]

Когда я спрашиваю, что типа b,

>>> type(b)

Я получаю это:

>>> <class 'django.db.models.query.QuerySet'>

Что это значит? Это тип данных типа dict, list и т. Д.?

Будет признателен пример того, как я могу построить структуру данных, такую ​​как QuerySet.

Я бы хотел знать, как Джанго строит это QuerySet (кровавые подробности).

Ответы [ 3 ]

36 голосов
/ 14 января 2011

A django queryset , как следует из его названия, в основном это набор (sql) запросов, в приведенном выше примере print(b.query) покажет вам sql запрос, сгенерированный из ваших вызовов django filter.

Поскольку наборы запросов lazy , запрос к базе данных выполняется не сразу, а только при необходимости - когда набор запросов оценивается .Это происходит, например, если вы вызываете метод __str__ при его печати, если вы вызываете list() для него, или, что происходит в основном, вы итерируете его (for post in b..).Эта лень должна уберечь вас от выполнения ненужных запросов, а также позволяет, например, связывать наборы запросов и фильтры (вы можете фильтровать набор запросов так часто, как хотите).

15 голосов
/ 13 января 2011
3 голосов
/ 17 ноября 2015

QuerySet представляет коллекцию объектов из вашей базы данных. Может иметь ноль, один или несколько фильтров. Фильтры сужают результаты запроса на основе заданных параметров. В терминах SQL QuerySet приравнивается к оператору SELECT, а фильтр является ограничивающим предложением, например WHERE или LIMIT.

https://docs.djangoproject.com/en/1.8/topics/db/queries/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...