Step 3 (S-44798)

From Stepik Wiki
Revision as of 14:05, 6 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14830/step/3

Step 3 (S-44798) 1.png

[00:00 - 00:16] итак для загрузки нескольких объектов из базы данных то есть для осуществления выборки запроса используются специальные объекты называемые какой resets а используй использовании этих объектов оно


[00:16 - 00:33] практически встречается в обработке каждого запроса поэтому давайте посмотрим какой пене предоставляют и в чем их особенность а и такой recess объект который представляет собой некоторый


Step 3 (S-44798) 2.png

[00:33 - 00:52] запрос к базе данных можно сказать что твой рецепт представляет собой множество объектов то есть если модель 1 объект такой рецепт это некоторое множество а которое можно уточнять а либо делать с ним всякие массовой операции


[00:52 - 01:07] важно понимать что сейчас является ленивыми объектами а что ты знаешь это значит что непосредственно запрос в базу данных строится


[01:07 - 01:24] а строится постепенно а выполняется только в тот момент когда понадобятся а запрос в базу данных выполняется при индексации queryset то есть когда в а используете


[01:24 - 01:41] оператору индексация slicing а рядом с объектом кориса снять тропикоз это вы используете индексацию а происходит запрос базе данных либо когда вы вызываете


[01:41 - 01:59] метод который должен вернуть непосредственно да да да это этих пор представляет включительно собой структуру в памяти а поэтому можно хранить переменных сколь угодно долго


[01:59 - 02:16] можно преобразовывать 1 в другой запрос при этом не происходит а давайте посмотрим на примере что такое какие есть методы и а как обычно используют clarisonic а


Step 3 (S-44798) 3.png

[02:16 - 02:33] есть 2 вида методов которые поддерживают их называем и ченнинг а то есть цепочки вызовов и те которые возвращают значение чайник а это так скажем ну может этот подход либо патр программирования


[02:33 - 02:50] когда а вызов метода объекта возвращает а объект того же самого класса только немного изменен а начнем с того что у нас есть некоторое модель post


[02:50 - 03:06] а в этой модели есть свойство origins это свойство генерируются библиотека и django models а свойство общества представляет собой объект класса model management


[03:06 - 03:22] менеджер это некоторой надстройкой над кори сад но фактически а можно считать что model manager предоставляет все те же самые методы что я говорю большинстве своем если кому то у менеджера вызвать какой нибудь а метод


[03:22 - 03:41] списка ченнинг методов вы уже получите настоящий кларисса например а вот у нас тут еще во 2 строчке переменной post еще является model менеджерам мы у нее вызывали метод фильтр а как мы помним метод фильтр а добавляет условия


[03:41 - 03:58] то есть он уточняет запрос выделяет некоторое подмножество объект а здесь указывается значение по которому производится фильтрация обозначение мы поговорим чуть позже


[03:58 - 04:14] в результате вызова метода фильтр это а объект cassette если вы этого объекта вызовите фильтр еще раз у вас а условия сложатся вместе


[04:14 - 04:30] как называется фильтр 2 раза у вас получается логическая и между условиями условия 1 и условия 2 то есть в языке а важно то что при вызове метода вы получаете заново объект


[04:30 - 04:45] а какой reset запросов в базу при этом не происходит то есть смотрите вы можете вызывать методы несколько раз подряд здесь происходит вызовите и у вас по прежнему остается кольца


[04:45 - 05:02] и наконец когда вы делаете операцию индексирования слайсинг происходит непосредственно запрос к базе а поскольку у вас указано 0 10 это валентных оператору лимит


[05:02 - 05:20] в москве у вас будет выполнен запрос а с ограничением 10 записи то есть запрос выполняется только в последней строчке а зачем может понадобиться ченнинг то есть в чем ни в чем + такого подхода


[05:20 - 05:36] а + похода в том что что вы можете сохранять а подготовленный queryset в каких то переменах а например вы можете определить свой reset в которое попадают


[05:36 - 05:53] только те записи которые видны пользователю то есть а скажем в таблице есть множество записей но некоторые из них не опубликовано о некоторых публикованы видны пользователю вы можете подготовить а сердце например назвать его помнишь


[05:53 - 06:09] post фильтр


[06:09 - 06:25] ну будем считать что поля называется нас пап а вот именно 16 reset а ясно что пользователь на сайте может


[06:25 - 06:44] а смотреть посты по разным принципам например по определенной категории либо по определенному тегу его чему то другому а например запрос по категории нас есть мы к нему применяли метод фильтр


[06:44 - 07:03] категория равняется c а смотреть мы получаем новые колеса то есть старый рецепт в результате ченнинг не меняется а привлечения вызвала как раз возвращаюсь снова к в сад а более сложное чем то


[07:03 - 07:23] предыдущей а в чем + в том что во 2 сете нам не нужно указывать 1 условие ты сперва условий она у нас как бы а наследуются прощения а это позволяет избежать копирования условия допустим пользователя есть 10 разных выборок


[07:23 - 07:38] постов на сайте а условия публикации вполне может быть сложно то есть это может быть 1 флажок проверка какой то даты еще чего то чтобы постоянно не копировать вот этот код а создается


[07:38 - 07:55] 1 раз колеса для пользователя сохраняется в какую то переменную либо в виде функции оформляется и а все остальные говоришь это который строится до пользователь они а используются уже на основе вот это подготовленного


[07:55 - 08:12] это позволяет а основная основное назначение вот то что позволяет а не дублировать условиях итак теперь давайте посмотрим какие есть методы а методы вскоре сад


Step 3 (S-44798) 4.png

[08:12 - 08:31] можно условно разделить начинку и нам это знать возвращающий значение а чайник методы возвращают новый объект нет никакого запроса не выполняя итак 1 метод кто использует сейчас это фильтр и а


[08:31 - 08:49] парни с не метод exclude метод фильтр аналогично условию про построение условиям поговорим чуть позже а фильтр метод exclude аналогичен фильтру но с прошедшим с предшествующим условиях


[08:49 - 09:08] то есть это условие добавляется с отрицанием а метод or by добавляет сортировку сортировать можно по 1 или нескольким полям а вместо дается а


[09:08 - 09:26] либо название поля например примеру такой может и до t пап это означает сортировать сортировать по дате публикации либо в начале можно указать знак -


[09:26 - 09:42] то есть по прежнему строчка но со знаком - а это означает сортировать в обратном порядке по убыванию а итак


[09:42 - 10:00] дальше да довольно хитрый метод позволяет добавить агрегацию то есть вы можете сделать запрос по постам и одновременно считать количество тегов которые есть в данном посте


[10:00 - 10:19] надо сказать что этот метод на практике в приложении запрос с джойнами между разными таблицами а и с агрегацией это довольно трудоемкий запросы поэтому такие запросы делать не рекомендуется а вот зато метод в лес


[10:19 - 10:38] наоборот очень полезен для оптимизации производительности дело в том что когда фильтр с возвращает объекты никогда reset в результате осуществляет запрос возвращает объект модель


[10:38 - 10:56] то есть экземпляр класса post нашем случае создания модели в джанге довольно хитрая процесс то есть это как минимум конструкция а объекта класса + отрабатывает всякой дополнительной логикой по образованию значении объекта например даты


[10:56 - 11:15] образуется специальные объекты а в некоторых случаях нужно выбрать а просто далее причем а часто нужно выбрать не все колонки а какие то 2 3 если вам нужно выбрать всего 2 3 колонки вы можете указать место the valley услуг


[11:15 - 11:31] получите а рецепт который возвращает сырые данные модели свои данные это бывает полезно для оптимизации производительности запросов distinct


[11:31 - 11:46] аналогично реальные конструкции частица указывает на то что нужно выбирать только а только различающиеся а пися


[11:46 - 12:04] это бывает актуально когда вы выбираете не все колонки либо выборку не входит публичный ключ ключ а то есть при выборке без первичного ключа distinct может быть вполне актуальны методы селекторы этот и пресечь делаешь а


[12:04 - 12:22] метода следует поговорить отдельно каким образом производится выборка связанных объектов представьте что мы а загружает страницу на которой отображаются 10 постов у каждого из постов есть по 2 3


[12:22 - 12:40] а связанных так типично операция загружаются с начало посты потом в цикле а например шаблонизаторы в цикле либо в коде поэтому в цикле проходится по твоим постам и у каждого поста вызывается метод сгенерированный


[12:40 - 12:55] метод tax а свойство text него метод all а вот этот вызов повернет


[12:55 - 13:13] все теги для данного поста в результате у нас будет 10 запросов к таблице стокгольме а дело 10 запросов это неэффективно с точки зрения производительности поэтому есть специальные методы


[13:13 - 13:32] селекторы эти методы позволяют выбрать а дамы из основной таблицы в нашем случае с постов и дополнительный с ними выбрать данные из связанных таблиц а в нашем случае это категория libertarian


[13:32 - 13:49] а разница в том что 1 из них селекторы это делать за 1 запрос этот это делается за 2 запроса и объединяет да


[13:49 - 14:07] 3 языка python то есть уже уже в питании итак это на список ченнинг методов то есть методы которые возвращают а новый объект курица также есть методы которые возвращают результат


Step 3 (S-44798) 5.png

[14:07 - 14:24] например этот крид вообще не относится к выборке он создает новый объект а для всех


[14:24 - 14:41] объектов которые относятся к данному queryset у производится обновление то есть работает следующим образом сначала формируется какой reset в котором указаны все условия то есть условия в фильтрация объектов потом взрывается а этот апдейт обновляет несколько объектов сразу


[14:41 - 14:57] как обновить 1 объект а объект это делается с помощью изменения его свойств вызовом метода save модели с помощью метода в коде с этим можно обновить несколько объектов сразу


[14:57 - 15:16] аналогично delete удаление пачки объектов из базы о крит а это шутка от которые получаются получить объекта sda из базы данных если его нет он создает


[15:16 - 15:33] новый настолько важными что даже 2 раза а это


[15:33 - 15:52] возвращает количество записи то есть вместо того чтобы вернуть а все записи которые есть а в соответствие с оператором com звездочка возвращает их количество соответственно это возвращается не объект а число то есть а все указанные методы а


[15:52 - 16:08] они специфичен тем что возвращается сразу некоторый результат то есть все эти методы они приводят непосредственно запросу а в базу данных обсудим синтаксис а условий которые используются в методах фильтр


Step 3 (S-44798) 6.png

[16:08 - 16:25] и exclude а субстанция эти условия позволяют вам строить аналогию а конструкции то есть условиях каким то образом точно выборке а


[16:25 - 16:40] синтаксис следующее во 1 а в методах фильтр exclude вы можете просто указать точное значение поля выглядит это вот так если у вас есть какой то квартире этого злачного места


[16:40 - 16:56] фильтр например продается точное значение поля пк первичный ключ либо дотошно за точности будем есть указывать какие нибудь


[16:56 - 17:13] реально существующие поля id равняется 3 а к чему вообще так можно писать ну с точки зрения python это просто вызов функции фильтр с передачей а аргументов по


[17:13 - 17:31] имени а внутри этой функции они складываются все именованных аргументов складываются в отдельный словарь а почему их можно извлечь прямых можно проверить то есть функция фильтра на заранее не знает кроме аргументы будут называться используют передачу по имени а


[17:31 - 17:48] если передать просто какой то имя поля в таблице а и указать ее значение это будет выборка по точному совпадению то есть это аналог условия в сквере field равняется в ну фактически 1


[17:48 - 18:03] что делать если нам нужно какую то другую операцию не сравнение не понравилось что то иное в этом случае джанго предлагает специальный синтаксис а


[18:03 - 18:22] которое заключается в том что к имени поля дописывает некоторые суффикс а например суффикс contains суффикс contains a изменяет изменяет условия которая будет сгенерирован если с 1


[18:22 - 18:40] из 1 условия будет получено field равняется верю в базе данных то получится условия feel like very


[18:40 - 18:57] то есть вместо совпадения по равенство происходит совпадение с помощью оператора лайф а мы видим что для этого используется суффикс то есть как передает с ними более низкую то суффикс а таких суффиксы довольно много


[18:57 - 19:16] можно посмотреть полный список документации ну что наиболее часто используется из ну проверка на 0 то есть вы продаете field is new равняется through либо feel ты знал равняется false а в языке python а


[19:16 - 19:32] сквере а это будет конструкция а field is либо field is no no то есть проверка на ну а суффикс житье больше great the а в этом случае построится условия


[19:32 - 19:50] такое field больше чем лте меньше чем меньше чем равно будет вот такой сквернословие а


[19:50 - 20:07] в общем то с помощью такого рода суффиксов можно строить довольно сложные запросы к 1 таблице а в некоторых ситуациях в некоторых ситуациях нужно сделать запрос к связанные таблицы то есть мы выбираем скажем посты но


[20:07 - 20:26] условия накладываются на категории связанные с постами а каким образом это делается это делается с помощью имен а отношений то есть допустим в нашей модели есть какое то отношение внешний ключ либо want one field а когда указывается имя этого отношения


[20:26 - 20:44] а после чего значение поля уже в таблице с отношениями и потом значение а давайте посмотрим на примере вот у нас есть посты с список постов в блоге и каждый пост через фоминки связан с категорией причем


[20:44 - 21:02] свойства в модели называется игорь а что плиз а уж что будет если мы отфильтруем посты с вот такими условиями во 1 а произойдет то есть мы видим что идет ссылка на модель категории поэтому в москве


[21:02 - 21:20] необходимо сделать joy 2 таблиц выбираться при этом будут только данные а из постов данной категории выдаваться не будут они будут использоваться для фильтрации а дальше в указываем поля title title это поле в таблице категории


[21:20 - 21:36] мы указываем суффикс который а означает режим а поиск в данном случае это будет оператор like a и некоторое значение то есть такая строчка заставят


[21:36 - 21:52] джанго models построить примерно следующий запрос выбрать из таблицы постов объединяет то сделает join таблица и категории по внеш по внешнему ключу из иллюстраций


[21:52 - 22:09] а по условию где title категории то есть название категории like a таким образом с помощью синтаксиса вы можете строить сложные условия а к вашим таблицы а такой синтаксис


[22:09 - 22:23] вносят 1 ограничение названия полей и таблиц не могут содержать военного подчеркивание потому что иначе будет невозможно отличить а простое обращение к полю от добавления специального суффикс