Перейти к содержимому

Как называется встроенная база данных в django

  • автор:

Модели

Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк 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 , который собственно и будет использоваться в качестве базы данных.

Установка пути к базе данных в проекте Django

Поддерживаемые субд

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

Модели данных и поля

В реляционных базах данные хранятся в таблицах, почти как 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()

Создание моделей в файле models.py в приложении на Django

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

Каждая модель сопоставляется с определенной таблицей в базе данных. Однако пока у нас нет в бд таблицы, которая хранит объекты модели Person. И в этом случае нам надо создать и выполнить миграцию. Миграция преобразует базу данных в соответствии с определением моделей.

Вначале необходимо создать миграцию с помощью команды

python manage.py makemigrations

Создание миграции моделей в Django

После этого в приложении в папке 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, которое будет представлять первичный ключ, добавляется по умолчанию. Поэтому в приниципе в самой модели нам не нужно явным образом определять какой-либо идентификатор.

Миграция моделей в Django

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

python manage.py migrate

Выполнение миграции базы данных в Django

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

базы данных SQLite в Django

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

Какую базу данных использовать в фреймворка 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *