Модели
Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк Django уже по умолчанию предоставляет удобный функционал для работы с различными системами баз данных.
Настройки подключения к базе данных
По умолчанию Django в качестве базы данных использует SQLite. Она очень проста в использовании и не требует запущенного сервера. Все файлы базы данных могут легко переноситься с одного компьютера на другой. Однако при необходимости мы можем использовать в Django большинство распространенных СУБД.
Для работы с базами данных в проекте Django в файле settings.py определен параметр DATABASES , который по умолчанию выглядит следующим образом:
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', >>
Переменная DATABASES содержит набор конфигураций подключений к базам данных в виде словаря. Ключи в этом словаре — названия подключений. То есть мы можем определить кучу подключений. Но как минимум одно подключение должно быть определено в переменной DATABASES — подключение с именем default , которое представляет подключение по умолчанию.
Конфигурация каждого подключения может состоять из ряда параметров. По умолчанию указываются только два параметра. Параметр ENGINE указывает на используемый движок для доступа к БД. В данном случае это встроенный пакет django.db.backends.sqlite3 .
Второй параметр — NAME указывает на путь к базе данных. По умолчанию база данных называется db.sqlite3 . Для установки пути используется каталог из переменной BASE_DIR, которая задана в начале файла:
BASE_DIR = Path(__file__).resolve().parent.parent
По умолчанию BASE_DIR указывает на каталог, в котором находится папка проекта. И после первого запуска проекта в указанном каталоге по умолчанию будет создан файл db.sqlite3 , который собственно и будет использоваться в качестве базы данных.

Поддерживаемые субд
Чтобы использовать другие системы управления базами данных, необходимо будет установить соответствующий пакет.
Модели данных и поля
В реляционных базах данные хранятся в таблицах, почти как Excel или Google Spreadsheets. Представим, что у вас есть собственный блог, где вы пишете статьи. Данные о постах в БД выглядят примерно так:
В таблице 5 колонок: номер статьи, заголовок, текст, время создания и время публикации. Каждая строчка — это пост.
Статьи блога хранятся в базе данных, но как их оттуда достать? Для этого и нужен Django ORM. Он извлекает данные из базы в удобном виде: например, даты из колонок время создания и время публикации , он сразу сделает объектами datetime , а не строками. Но чтобы Django ORM работала, ей нужно описание таблицы.
Давайте вместе попробуем составить модель для поста в блоге. Для начала в ней будет только одна колонка — текст:
from django.db import models class Post(models.Model): text = models.TextField()
Давайте просто игнорировать все эти class и models.Model и перейдём к сути. Post — это название модели данных — поста в блоге. В базе данных много таблиц и нужно дать ей название.
Таблицу назвали, теперь создадим колонки. Текст статьи сохраним в колонке text . Это и делает последняя строчка: text = models.TextField() . Здесь написано, что у поста будет колонка text , и хранить его нужно в поле для текста — models.TextField() . Поля сообщают какого типа данные будут храниться у модели.
Расширяем модель
Теперь у поста будет и заголовок:
from django.db import models class Post(models.Model): title = models.CharField(max_length=200) text = models.TextField()
Заголовок — это тоже текст, но у него не TextField , а CharField . Это тоже поле для хранения текста, но оно ограничено по длине — не более 200 символов. Эти поля очень похожи, но называются по-разному. Это сделано потому, что для базы данных это достаточно существенно: в одном случае она знает, что на заголовок ей нужно выделить 200 символов памяти, а во втором не понятно сколько памяти займёт эта колонка.
Добавим дату и время написания поста created_date и его публикации published_date :
from django.db import models class Post(models.Model): text = models.TextField() title = models.CharField(max_length=200) created_date = models.DateTimeField() published_date = models.DateTimeField()
DateTimeField хранит дату и время. Теперь получилась модель, которая описывает табличку с картинки в начале статьи.
Что читать
Можно узнать как работать с данными в нашей статье Достаем данные из БД.
Или узнать больше о написании моделей:
- Документация Django
- Больше о моделях в нашей статье связи между моделями
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Как называется встроенная база данных в django
Модели в Django описывают структуру используемых данных. Используемые в программе данные хранятся в базах данных, и с помощью моделей как раз осуществляется взаимодействие с базой данных.
При создании приложения по умолчанию в его каталог добавляется файл models.py , который применяется для определения моделей. Модель представляет класс, унаследованный от django.db.models.Model .
Так, изменим файл models.py следующим образом:
from django.db import models class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerField()

Здесь определена простейшая модель, которая называется Person и которая представляет человека. В модели определены два поля. Поле name представляет тип CharField — текстовое поле, которое хранит последовательность символов. Оно будет хранить имя человека. Для CharField обязательно надо указать параметр max_length , который задает максимальную длину хранящейся строки. И поле age представляет тип IntegerField — числовое поле, которое хранит целые числа. Оно предназначено для хранения возраста человека.
Каждая модель сопоставляется с определенной таблицей в базе данных. Однако пока у нас нет в бд таблицы, которая хранит объекты модели Person. И в этом случае нам надо создать и выполнить миграцию. Миграция преобразует базу данных в соответствии с определением моделей.
Вначале необходимо создать миграцию с помощью команды
python manage.py makemigrations

После этого в приложении в папке migrations мы обнаружим новый файл, который будет иметь примерно следующее содержимое:
from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Person', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=20)), ('age', models.IntegerField()), ], ), ]
Это и есть миграция. Здесь можно заметить, что создается не два, а три поля — поле id, которое будет представлять первичный ключ, добавляется по умолчанию. Поэтому в приниципе в самой модели нам не нужно явным образом определять какой-либо идентификатор.

Теперь надо выполнить данную миграцию. Для этого выполняется команда
python manage.py migrate

После этого, если мы откроем базу данных db.sqlite3 , которая есть в проекте, то мы увидим, что в нее добавлена таблица для хранения данных модели Person:

Стоит учитывать, что в процессе работы над проектом определение модели может меняться — к ней могут добавляться новые поля, либо могут удаляться уже существующие, либо могут добавляться новые модели, данные которых мы также захотим хранить в базе данных. И в этом случае опять надо создавать миграцию и применять ее к базе данных, чтобы база данных была синхронизирована с определением моделей.
Какую базу данных использовать в фреймворка Django
Нет никакой встроенной базы данных. Официально Django поддерживает следующие:
Также существуют базы данных, поддерживаемые третьими лицами:
По умолчанию используется SQLite. Но вы можете использовать любую другую из списка. По моим наблюдениям, PostgreSQL — наиболее популярная
Отслеживать
ответ дан 23 сен 2022 в 6:47
18.4k 5 5 золотых знаков 24 24 серебряных знака 48 48 бронзовых знаков
- python
- django
- pgadmin4
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.