Django makemigrations


В Django makemigrations —  команда, которой формируется база данных с которой будет работать приложение. Структура базы задается в Python скрипте.



Django makemigrations — формирование базы в Django


За счёт makemigrations при использовании фреймворка не нужно заходить в Postgres или в MySQL и создавать таблицы. Структура формируется автоматически без написания SQL запросов врунчую.

Это значительно упрощает разработку и является одним из плюсов Django. Наполнение базы может выполняться уже в процессе работы веб-приложения. В django-admin или пользователями при взаимодействии с сайтом.



Тип базы данных и реквизиты подключения к ней задаются в файле settings.py проекта.


Django makemigrations


По умолчанию Django использует sqlite — базу данных в одном файле. Её достаточно для небольших проектов.


sqlite база находится обычно в каталоге приложения на одном уровне со скриптом manage.py

sqlite django


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

Сказать спасибо