Что такое Django QuerySet?

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

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

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

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

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

>>> type(b)

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

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

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

Пример того, как я могу построить структуру данных, такую ​​​​как QuerySet, будет оценен по достоинству.

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


person gath    schedule 13.01.2011    source источник
comment
Вы можете посмотреть исходный код Django, чтобы увидеть кровавые подробности. Помимо этого, QuerySet — это просто объект, как и многие другие, которые иногда ведут себя как список.   -  person Deniz Dogan    schedule 13.01.2011
comment
Для чего это: docs.djangoproject.com/en/dev/ref/ models/querysets Чтобы узнать, как это работает, как уже упоминалось, посмотрите исходный код.   -  person Felix Kling    schedule 13.01.2011
comment
Вот где QuerySet определен в Django: github.com /django/django/blob/master/django/db/models/query.py   -  person Edward D'Souza    schedule 31.05.2013


Ответы (4)


Да, это просто другой тип, встроенный как и любой другой тип.

person Ignacio Vazquez-Abrams    schedule 13.01.2011
comment
Ответ только по ссылке? Это должно быть большим нет-нет… - person o0'.; 24.05.2020

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

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

person Bernhard Vallant    schedule 13.01.2011

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

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

person Harshit Garg    schedule 17.11.2015

QuerySet — это список объектов данной модели, QuerySet позволяет вам читать данные из базы данных.

person Pythonsguru    schedule 23.08.2019