12 сентября 2016 г.

Django. База данных и модели ( часть 6)



Реляционные базы данных

Django прекрасно работает и с MySQL, PostgreSQL, SQLite, Oracle - все это реляционные базы данных.

Реляционные - это значит relational, relation - отношения, в нашем случае отношения между таблицами в нашем случае.

В прошлом уроке мы создали простое Django приложение “houses” и подключили его к проекту. А сейчас начнем его настраивать и начнем с файла models.py, в котором мы определим структуру данных приложения.

models.py - отвечает за описание нашей будущей базы данных

Внутри его, создаем класс House унаследованный от models.Model

В терминах Django класс House называется моделью и модель House отвечает за конкретный дом, который мы будем продавать клиенту.

Начинаем заполнять нашу таблицу. Таблицы в ORM оформляются в виде классов.

class House(models.Model):
      pass



Наши дома имеют определенные характеристики вроде:
  • Цены
  • Площади
  • Материала изготовления
Эти характеристики задаются внутри модели и называются полями модели
(переменные - колонки базы данных)

Создадим заголовок, первую колонку
name = models.CharField("название", max_length=200)
# CharField - подразумевает собой набор символов
# max_length=200 - максимальная длина символов в строке

Создадим еще одно поле price, во вторую колонку
price = models.IntegerField("цена")
# IntegerField - может принимать и хранить целые числа
# “цена” - русское название поля price

Добавим еще одно поле description типа TextField в третью колонку
# TextField - в отличии от CharField, может хранить тексты произвольной длинны (для больших массивов текстовой информации) и его не нужно ограничивать параметром max_lenght
descriptions = models.TextField(“описание”)

Дополнительно
# models.DateTimeField - используется для хранения даты публикации статьи, это формат хранения как времени так и даты
# models.DateField - хранит только дату
# models.IntegerField - хранит цифровые целочисленные значения

class Meta - включает в себя дополнительные свойства для нашей будущей таблицы.

Нас интересует название таблицы, мы не хотим, чтобы Django самостоятельно давал название нашей таблицы, по-этому мы описываем это в классе Meta. Его нужно поместить во внутрь класса House (sites -> dom_u_morya -> houses)


файл models.py

сlass House(models.Model):
      class Meta():
            db_table = "new_houses"

Более современные требования требует дополнительных параметров

class House(models.Model):
      house_name = models.CharField("Название", max_length=200, default="")
      house_price = models.IntegerField("Цена", default=0)
      house_description = models.TextField("Описание", default="")

И так в нашей модели House есть три поля, которые описывают его структуру


Теперь нам нужно спроектировать модель и базу данных или иными словами создать таблицу в базе данных таблицу, которая будет соответствовать нашей модели. Django умеет работать с различными базами данных, но минимальная установка как у нас создает минимальную базу данных sqlite3, по этому мы и будем с ней работать.

Нажмем Ctrl+Alt+R и введем:

> makemigrations houses

Django создаст миграцию с номером 0001


Файлы миграции хранятся в каталоге migrations внутри приложения к которому они относятся, в данном случае houses

Вообще сама миграция это всего лишь инструкция о том, что нужно сделать с базой данных. Чтобы эта инструкция сработала, нужно применить миграцию

> migrate houses

Миграция применялась и теперь можно открыть и посмотреть нашу базу данных. В ней появится таблица houses_house с 4-мя колонками

Как открыть базу данных смотрим или читаем тут

 
id - это идентификатор, который содержит уникальный номер записи в таблице, Django создает его автоматически

Получается, что наша модель House, является отражением таблицы houses_house в базе данных и наоборот и создали мы ее без использования каких либо знаний о SQL запросов и знаний о базах данных.

ORM - Object Relational Mapping - это технология программирования, она связывает базу данных с объектно ориентированными концепциями языков. В нашем случае, ORM связывает таблицу houses_house c классом House.

Технология ORM - является одной из ключевых возможностей Django.

ORM - это некая система, которая позволяет обращаться к базе данных как к объектам класса. То есть мы создаем некий класс, в переменных этого класса мы описываем колонки таблицы и в дальнейшем обращаясь именно к этому классу, мы через ORM обращаемся к базе данных. Именно на базе этого класса, база данных создается фреймворком.

1 комментарий :

  1. Ученика 11 класса нет в базе данних кто виноват?
    Ответьте пожалуйста

    ОтветитьУдалить

Оставить отзыв