В Django makemigrations — команда, которой формируется база данных с которой будет работать приложение. Структура базы задается в Python скрипте.
Django makemigrations — формирование базы в Django
За счёт makemigrations при использовании фреймворка не нужно заходить в Postgres или в MySQL и создавать таблицы. Структура формируется автоматически без написания SQL запросов врунчую.
Это значительно упрощает разработку и является одним из плюсов Django. Наполнение базы может выполняться уже в процессе работы веб-приложения. В django-admin или пользователями при взаимодействии с сайтом.
Тип базы данных и реквизиты подключения к ней задаются в файле settings.py проекта.
По умолчанию Django использует sqlite — базу данных в одном файле. Её достаточно для небольших проектов.
sqlite база находится обычно в каталоге приложения на одном уровне со скриптом manage.py
Когда разрабатывается приложение рассчитанное на большое количество посетителей больше подходят MySQL и Postgresql. Тип базы данных и реквизиты доступа к ней указываются в одном скрипте.
За счёт миграций структура базы определенная в коде попадает в БД.
Структура определяется в models.py
mcedit my_site/models.py
Ниже пример синтаксиса для создания трех таблиц. В Python скрипте обозначены типы данных для содержимого и связи, представленные ForeignKey.
from django.db import models class Table1(models.Model): top_name = models.CharField(max_length=264,unique=True) def __str__(self): return self.top_name class Table2(models.Model): topic = models.ForeignKey(Table2,on_delete=models.DO_NOTHING,) name = models.CharField(max_length=264,unique=True) url = models.URLField(unique=True) def __str__(self): return self.name class Table3(models.Model): name = models.ForeignKey(Table2,on_delete=models.DO_NOTHING,) date = models.DateField() def __str__(self): return str(self.date)
После внесения изменений в скрипт или при его написании изначально выполняется migrate
(test) admin@server:~/dev/test$ python manage.py migrate
Затем изменения применяются выполнением makemigrations.
(test) admin@server:~/dev/test$ python manage.py makemigrations my_site
Migrations for 'my_site':
my_site/migrations/0001_initial.py
— Create model Table1
— Create model Table2
— Create model Table3
— Add field name to Table3
С базой затем можно работать подключаясь непосредственно к Postgres/MySQL/SQLite или из из консоли Python используя модуль shell
python manage.py shell
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type «help», «copyright», «credits» or «license» for more information.
(InteractiveConsole)
>>> print ('hello')
hello
>>> from my_site.models import Table1
Например можно вывести все содержимое, аналог запроса SELECT * в SQL.
> print (Table1.objects.all())
<QuerySet []>
Читайте о том как подключиться к базе Postgres, а также про виртуальное окружение.
Виртуальное окружение Python используется для изоляции приложений и установки для каждого индивидуально своих зависимостей.