Step 4 (S-44794)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14829/step/4

Step 4 (S-44794) 1.png

[00:00 - 00:14] так как мы видели доступ к базе данных языке python в принципе довольна примитивный получили соединения создали курсор далее курсор вызываем функцию языке передаем запрос получаем данные


[00:14 - 00:31] а вся остальная сложная сложиться общем то на программиста то есть правильно сформировать запрос а выбрать не ошибиться с названиями таблиц и а привести данные необходимые ему вид а тем не менее прямое


[00:31 - 00:49] прямой доступ к базе он иногда бывает очень полезен в виду того что а не выполняется лишнего кода проще и быстрее работает а и а позволяет писать сложные sql запрос а однако на практике при разработке веб приложений


[00:49 - 01:08] а большая часть запросов процентов 70 75 они на самом деле является очень простым и типовыми запросами как то загрузить 1 строчку из таблицы обновить 1 строчку добавить новую строчку а либо загрузить а строку из 2 таблиц соединитель


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


[01:25 - 01:40] он же translation а этот подход позволяет вам минимизировать количество а коды которые вы пишете код стр запросов а для


[01:40 - 01:55] простых для типовых операций с объектами которые хранить тем не менее а все равно иногда бывает необходимо выполнить сложно сказать запрос а каким то образом очень хитро выбрать данные


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


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


Step 4 (S-44794) 2.png

[02:30 - 02:50] джага the connection джанго тебе 1 переменная представляет собой соединение connection а с дефолтной базы да то есть а обычно django проект начинается с того что у него скопировано 1 баз данных


[02:50 - 03:09] это база данных по умолчанию а часто этим проект ограничивается поэтому есть такая перемена в которой содержатся соединения вашей основной базы данных с default соответственно вы импортируете эту переменную


[03:09 - 03:25] даша с ней работаете так же как а с обычным с обычным соединением майских деньги которые мы рассмотрели на предыдущий слайд получаете курсор сделайте вызов а


[03:25 - 03:40] здесь надо понимать что вот вот вместе вы работаете не с библиотекой а по факту курсор и connection это некоторые обертке над стандартными объектами это а верстке кто предоставляет django


[03:40 - 03:56] но основные основные вызвал них сохранена и синтаксиса вы также можете вызывать передавать дополнительные параметры это все работает точно так а в случае когда у вас несколько баз данных в проекте


[03:56 - 04:12] тогда а вашем файле настроек settings у вас указано несколько соединения у каждого соединения есть имя базы данных по умолчанию обладает именем default а


[04:12 - 04:27] допустим у нас есть еще какая то другая база данных в конфиге мы записали под именем пугают а тогда в переменной connections то есть s на конце содержатся а все


[04:27 - 04:42] соединение со всеми базами данных мы можем работать с connections как а как со словарем то есть мы видим что мы просто по название соединения получаем а ну по названию получаем соединение с конкретной базы да


[04:42 - 04:58] например вот эту вот конструкция аналогично тому что мы делаем мы получаем соединение с базой данных выполняем запрос а


[04:58 - 05:15] здесь мы выполняем уже запрос в другой базе да а вот общем то таким образом мы можем получить возможность выбрать данные из базы напрямую минуя библиотеку жонглеры а теперь


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


Step 4 (S-44794) 3.png

[05:33 - 05:53] библиотекой а автор налоги jungle называется джанго models for это более общее название а всего то есть все таки библиотека как называется django models а и так 4 команды которые помогут вам в разработке


[05:53 - 06:08] ваша модель команды были date march а после того как вы описали структуру моделей с помощью этой команды вы можете произвести валидацию то есть проверить что все модели описаны коллег что


[06:08 - 06:26] нет никаких логических ошибок то есть понятно что синтаксические ошибки исправляет язык python эта команда проиграет некоторые логические ошибки а ну и статический конечно в том числе потому что модели загружаются в память


[06:26 - 06:45] если они не работоспособной команда работает 2 команда sync тебе команда sync тебе позволяет вам создать таблицы она используется при первоначальном деплое приложение а модель данных


[06:45 - 07:04] а джанги определяется именно с помощью модели то есть с помощью специальных классов а аня с помощью таблиц в базе то есть таблица это общем то в диалоге django они вторичны а для того чтобы создать таблица по имеющимся моделям используется команда sync дебил


[07:04 - 07:21] она создается таблицы в базе данных она работает 1 раз то есть она не умеет изменять таблице только создается с 0 команда sync d используется например когда вы установили себе какое то новое приложение


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


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


[07:56 - 08:12] ваши модели напрямую с ними работать то есть это более удобно интерпретатор python а интерпретатор python которая представьте еще инициализирует а окружения вашего проекта д б шоу


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


[08:27 - 08:46] вам нужно будет каждый раз вводить пароли указывать адреса серверов а соответственно большое позволяет всего этого избежать поскольку читает из конфига джанги это удобный способ запустить клиент с определенной базой на которой настроен ваш проект


[08:46 - 09:03] итак эти команды мы будем использовать для экспериментов а теперь давайте перейдем к django озеро а библиотека расшифровывается как обжиг translation а это библиотека которая представляет


Step 4 (S-44794) 4.png

[09:03 - 09:19] объектно ориентированный доступ к реляционной базе данных такими газе есть а в разных языках джанго это частое горка называется на django models а давайте


[09:19 - 09:38] установим соотношение между терминами сквер и терминами которые предоставляют а р а в воскресенье то есть базы данных мы оперируем понятием таблиц каждый таблицы в сквере а соответствует класс модели


[09:38 - 09:55] ну почти каждый то есть модель 1 модель а в джанге это 1 таблица причем к иметь в виду класс модель то есть таблица


[09:55 - 10:09] каждая таблица а в проекте django представлен в виде отдельного python класс соответственно строка таблицы например запись в протоколе 1 машину


[10:09 - 10:28] представлена в виде объекта этого класса то есть объекты модели а запрос искать запрос соответствует приблизительно соответствует а специальный символ объекту какой reset


[10:28 - 10:43] отдельно от этого такие объекты которые соответствуют запросу представляет собой запрос к базе данных о причем не результат а именно сам вопрос


Step 4 (S-44794) 5.png

[10:43 - 11:02] а давайте посмотрим как бы в чем отличия на практике использования срок успеть под использование модель 1 1 снег это свойская мы передаем запрос виде строчки а потом


[11:02 - 11:19] проходим а в цикле всем всем результат каждый результат на распаковываем просто вот как то есть а на юзеров нас здесь а то либо список либо topple


[11:19 - 11:38] скорее всего там нечто что можно распаковать представить в виде последовательных значений распаковываем получаем конкретные значения которые были в страхе и выводим 2 а вот как тут тоже кот выглядят с использованием варя


[11:38 - 11:57] что здесь важно в чем отличие во 1 мы не используем курсор и используем соединений у нас есть некоторый класс класс юзер которая определяет таблиц именно с этим классом мы и работаем то есть мы используем объекта а


[11:57 - 12:14] мы используем выражение на языке python во 1 они на языке мы используем компьютеры программирование класс ездил а далее мы каким то образом отфильтровать пользователи у которых возраст больше 18 лет


[12:14 - 12:30] а вот для этого используется специальный вызов метода причем мы видим что аргументы особого вида то есть мы указали а перед что мы выбираем по полю и h


[12:30 - 12:48] и специальное специальность суффиксом жить и больше ну собственно указали 18 число то есть условие которое русские пишут увидеть строки пишутся с помощью вызов специальных методов


[12:48 - 13:05] 1 итерацию о результатах выглядит примерно также а только здесь если у нас переменная в 1 случае если юзер была питоновский то есть просто списком из 3 значений а здесь


[13:05 - 13:22] это объект модели объект модель класс союзов соответственно здесь вот мы обращаемся к свойству этого объекта а вот общем то примерное сравнение как выглядит код с сыром и следует использовать


[13:22 - 13:38] а на 1 взгляд кажется что с пользой ему несколько короче ловить а нам сказать что это не всегда так для простых запросов короче для сложных а набор получается несколько более громоздко а


[13:38 - 13:54] так теперь давайте посмотрим как собственно определяются а модели как описывают отдельные класс модели рассматриваются на примере модели post


Step 4 (S-44794) 6.png

[13:54 - 14:12] во 1 модель это класс это класс а все налоги python и просто класса которые наследуются от специального класса а django тебе морду а вот


[14:12 - 14:27] переменная здесь написано она получается таким образом джанго точка


[14:27 - 14:46] джанго точка импорт models а мы импортируем вот модуль модуль models


[14:46 - 15:01] и создаем новый класс наследуется от класса models точка model это важно иначе может быть просто питоновский класс а не модель а внутри внутри этого класса мы определяем а поля


[15:01 - 15:18] к примеру таким образом title равняется models чем feel а определение поле с для классов поэтому это свойства определение свойства таким образом


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


[15:36 - 15:54] всякие различные опции в данном случае мы знаем максимальную длину строки в языке есть также опция при создании таблицы мак сваял указывает какой длина она может быть а вот здесь мы видим что у вас примеру создано 3 поля


[15:54 - 16:08] а заголовок содержимое и а дата создания дата создания класса data filter то есть в базе данных работ франц когда читай а когда


[16:08 - 16:26] этот объект будет загружен язык python это будет экзамен экземпляр специального класса t он превратится во внутрь томск объект представление blank означает что пустые да помимо определения а разного рода


[16:26 - 16:42] полей в модели модели могут быть метода удалось определены 2 методы а методы а это а так скажем те операции которые можно


[16:42 - 16:59] осуществить с 1 объектом данной модели а в частности подчеркивание подчеркивание не кот вызывается питоном когда объект пытается когда объект пытаются превратить страну ну например при и его печати с помощью операторов


[16:59 - 17:17] при склеивании с другой строкой мы говорим что когда мы пытаемся сроку нам нужно использовать его назвать это позволит нам посты объекта объекта класса post


[17:17 - 17:33] легко преобразовывать строки далее ракетка абсолют а этот метод не обязательно а он позволяет построить


[17:33 - 17:50] путь к объекту а зачем это нужно очень часто в шаблонах а вам приходится строить построить угол к объекту конечно а на страницу отображения какого то определенного объекта например на страницу отображения 1 поста


[17:50 - 18:05] вариантов мы говорили уже довольно много то есть мы можем каждый раз шаблоне записывать этот угол а либо мы можем использовать специальные риверз раутинг для построения


[18:05 - 18:24] а либо хороший вариант это вызывает метод объекта которые необходимы в данном случае устроится просто склеиванием острог но здесь также можно итак


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


[18:41 - 18:55] а помимо этого мы 3 модели может быть специальный класс метр класс смета это задание различных опции модели то есть это настройке данной модели для


[18:55 - 19:15] джанго models знала как я скрывает в частности например можно задать опцию enable и сохранять модели в указанную таблицу по умолчанию имя таблицы выбирается а на основании


[19:15 - 19:34] имени приложение и имени модели например если у нас а модель называется post post а приложение называется блок то таблица будет называться ок post


[19:34 - 19:52] а у нас э таблица так скажем не зависит от нашего приложения то есть они используются какими то еще предложениями либо нам достались от предыдущих систем нам может понадобиться


[19:52 - 20:09] использовать а другие названия таблиц для этого есть опция детей а опция or drink а указывать сортировку по умолчанию то есть все запросы которые будут к данной модели


[20:09 - 20:24] они будут по умолчанию сортироваться по указанному а по указанному поля если вы явно не укажете другое а вот в чем то таким образом выглядят


[20:24 - 20:39] модель а 1 модель на языке java 1 модель а в проекте назад какие типы полей используется в языке жарко


Step 4 (S-44794) 7.png

[20:39 - 20:54] о еще раз горки django язык python а давайте посмотрим некоторые примеры разных полей и а во что превращается в базе данных мыслей


[20:54 - 21:11] а вообще нужно заметить что в библиотеку а 1 из ее преимуществ по сравнению с пользуясь ровно сквер а заключается в том что она представляет слой абстракции от конкретной базы да


[21:11 - 21:26] то есть а вы описываете вашу структуру делать запросы на языке который не зависит от какой то конкретной базы данных у разных баз у них синтаксис языка sql немного отличается а


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


[21:42 - 22:01] классы полей еще раз посмотрим на предыдущий слайд где указывается класс по ней вот описание конкретного поле вы создаете экземпляр экземпляр класса после определенного вида


Step 4 (S-44794) 8.png

[22:01 - 22:20] то есть models that field и так далее какие бывают классы и типы полей а чар чар filter строковой поля а небольшой длины так скажем а в базе данных и соответствует типу varchar


Step 4 (S-44794) 9.png

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


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


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


[23:10 - 23:26] и если вы указываете поле как емейл при попытке создания записи в базе будет до точнее до попытки будет проведена проверка что полете является валидным емейл а хотя


[23:26 - 23:42] как и другие виды полей field of например а вот будет храниться в базе данных с использованием varchar а далее есть текст


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


[23:57 - 24:16] гигабайты данных а field field соответствует mysql типа bool либо москве приводится к тайне интерфейс это обычное целое число соответствуют int


[24:16 - 24:35] а давайте отметим 2 типа запятая а в москве или соответственно есть типа data data нигде не удивительно а вообще базы данных есть специальные типы для работы с датами


[24:35 - 24:53] но когда вы пользуетесь базы данных а пытайтесь ввести туда дату и попытайтесь получить оттуда дату датой передаются как строки в определенном представления в частности а в маске формат


[24:53 - 25:11] примерно такой формат iso а сначала эта дата то есть в год


[25:11 - 25:27] месяц а через пробел возможно время часы минуты возможно секунд а


[25:27 - 25:46] но так или иначе если вы используете для работы с базой при загрузке данных а вы получите строку содержащую вот такой вот примерно дамаске если вы используете и у вас есть поля типа date date time field вместо


[25:46 - 26:03] строки вы получите в языке python уже объект то есть загрузив данные из базы с помощью вы получите обед соответственно


[26:03 - 26:20] date time date это для для даты и data data это для времени


[26:20 - 26:36] то есть берем на себя обязанность за преобразование данных которые хранятся в базе при загрузке внутрь фреймворка при образовании этих данных в правильной удобный для работы с ними вид


Step 4 (S-44794) 10.png

[26:36 - 26:53] создание полей можно указывать разные свойства давайте посмотрим на класс модели а свойство указываются как опции для конструктора то есть мы создаем новый объект поля и э


[26:53 - 27:11] конструктору передаем некоторые а некоторые опции какие опции есть опция довольно много полный список можно получить в документации по django а здесь вот я провел более такие популярные


Step 4 (S-44794) 11.png

[27:11 - 27:26] что с полем blank blank означает с опция blend она означает что поле может быть пустым а что вы с пустым пустым а с терминологии с точки зрения языка python


[27:26 - 27:42] например а в любой содержаться переменная а если а


[27:42 - 27:58] опция blend стоит тогда джанго не не будет ругаться при валидации если опция бланк не стоит то должно быть какое то значение то есть например для что это должна быть пустая строка


[27:58 - 28:13] итак план позволяет поле быть пустым а по в цену она актуальна для пустых полей она показывает как это пустое поле будет храниться в базе данных


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


[28:30 - 28:49] хранить пустые значения 2 видов это может быть либо 0 либо некоторое значение по умолчанию то есть вы можете в майские хранить пустую строку как пустую как а как новость либо как строгость 0 байт


[28:49 - 29:05] пустую дату вы можете хранить либо как ну либо как нулевую ну вот вот эта опция указывает как именно в пустые записи нужно хранить в базе да


[29:05 - 29:21] ну это понятно это максимальная длина поля актуально для field of то есть для текстовых полей прайма реки указывает что данное поле является первичным ключом


[29:21 - 29:36] мы говорили что желательно у каждого а при проектировании база у всех сущности создавать синтетические первичные ключи а то есть не привязан этом каким то реальным атрибутом х


[29:36 - 29:53] и джанго в принципе так и делает вот если мы посмотрим на модель post мы увидим что мы вроде бы используем какой то self пк то есть очевидно что у объекта есть штатов


Step 4 (S-44794) 12.png

[29:53 - 30:09] но среди полей его нету а по умолчанию джанго добавляет к списку полей поле id


[30:09 - 30:25] а то есть для каждой модели django создает специальные синтетические бенчи это просто идентификатор будет автоинкрементом автоматически увеличиваются приставки новых объектов а если же мы все таки хотим вместо


Step 4 (S-44794) 13.png

[30:25 - 30:40] вместо синтетического вот этого поля id использовать а другое поле в качестве можем это поле описать деленное значит это позволяет выбрать именно то личный ключ в данной таблице


[30:40 - 30:55] опция unique опция unique просто позволяет сделать уникальный ключ ну скажем


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


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


[31:30 - 31:48] индекса то структура которая позволяет быстро искать по полю а здесь хороших таких а сильвер делли так скажем серебряных пуль а в создание индексов нету то есть когда вы знаете индексы


[31:48 - 32:07] вы должны понимать а для каких колонок вы встаете и нужны они для этой колонке или нет то есть создание оптимизация запросов это отдельная тема вообще вопросу про баз данных мы просто отметим что в джанге можно создать index


[32:07 - 32:24] 1 колонке с помощью опции значение default задает значение по умолчанию для данного поля а причем оно создается на уровне языка python не тот


[32:24 - 32:39] как запись в базу данных предоставляет такую возможность в таблицах указывают значения а вот опция default она позволяет вам указывать на уровне языка python например вы можете указать функцию


[32:39 - 32:58] в качестве default можете указать некоторых эта функция будет вызываться каждый раз когда необходимо задать дефолтное значение и подставлять дефолтный означать например текущее время по какому нибудь странному часовому поясу пупсы что есть а


[32:58 - 33:15] а позволяет задать варианты значений а если а если вы хотите ее использовать то вы должны создать примерно вот такую конструкцию список и списке вариантов например


[33:15 - 33:33] для машин с седан хэтчбек


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


[33:49 - 34:05] 1 символ при этом поле должно быть а вот это будет выводиться на сайте частности в админке итак мы рассмотрели какие свойства полей на самом деле их намного больше и свойства используются не только для


[34:05 - 34:21] задание свойств колонок в базе а в таблицы в базе данных о свойства которые вы указываете у полей в модели используется также а самим фреймворком для


[34:21 - 34:35] построения всяких интерфейсов например построение админки то есть а этих свойств хранится информация о ваших модели о которых в базе может и не хранится