Resumo : neste tutorial, você aprenderá como criar modelos e usar migrações do Django para criar tabelas de banco de dados.
Este tutorial começa onde o tutorial de modelos do Django parou.
Introdução aos comandos de migração do Django
Ao trabalhar com Django, você não precisa escrever SQL para criar novas tabelas ou fazer alterações em tabelas existentes. Em vez disso, você usa migrações do Django.
As migrações do Django permitem que você propague as alterações feitas nos modelos para o banco de dados por meio da linha de comando.
O Django fornece alguns comandos para criar novas migrações com base nas alterações feitas no modelo e aplicar as migrações ao banco de dados.
O processo para fazer alterações nos modelos, criar migrações e aplicar as alterações no banco de dados é o seguinte:
- Primeiro, defina novos modelos ou faça alterações nos modelos existentes.
- Segundo, faça novas migrações executando o
makemigrations
comando. - Terceiro, aplique as alterações dos modelos ao banco de dados executando o
migrate
comando.
Suponha que você defina os Post
modelos no blog
aplicativo assim:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
published_at = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
Linguagem de código: Python ( python )
e você pode criar uma nova migração usando o makemigrations
comando:
python manage.py makemigrations
Linguagem de código: CSS ( css )
O makemigrations
comando verifica o models.py
arquivo, detecta alterações e faz as migrações correspondentes. Ele mostrará a seguinte saída:
Migrations for 'blog':
blog\migrations\0001_initial.py
- Create model Post
Linguagem de código: texto simples ( texto simples )
Nos bastidores, o comando cria o migrations\0001_initial.py
arquivo file.
Para visualizar o SQL que o Django irá executar para criar a blog_post
tabela no banco de dados, você usa o sqlmigrate
comando:
python manage.py sqlmigrate blog 0001
Linguagem de código: CSS ( css )
Neste sqlmigrate
comando, blog
é o nome do aplicativo e 0001
é o número da migração.
Ele produzirá o seguinte:
BEGIN;
--
-- Create model Post
--
CREATE TABLE "blog_post" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" varchar(120) NOT NULL,
"content" text NOT NULL,
"published_at" datetime NOT NULL,
"author_id" integer NOT NULL REFERENCES "auth_user" ("id")
DEFERRABLE INITIALLY DEFERRED
);
CREATE INDEX "blog_post_author_id_dd7a8485"
ON "blog_post" ("author_id");
COMMIT;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para aplicar as alterações ao banco de dados, você executa o migrate
comando:
python manage.py migrate
Linguagem de código: CSS ( css )
Ele mostrará a seguinte saída:
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying blog.0001_initial... OK
Applying sessions.0001_initial... OK
Linguagem de código: texto simples ( texto simples )
Observe que além de aplicar a migração para o Post
modelo, o Django também aplicou as migrações para os modelos integrados usados em autenticação, autorização, sessões, etc.
Se você executar o migrate
comando novamente e não houver migrações não aplicadas, o comando produzirá o seguinte:
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions, users
Running migrations:
No migrations to apply.
Linguagem de código: texto simples ( texto simples )
Para listar as migrações do projeto e seus status, use o showmigrations
comando:
python manage.py showmigrations
Linguagem de código: CSS ( css )
Saída:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
[X] 0009_alter_user_last_name_max_length
[X] 0010_alter_group_name_max_length
[X] 0011_update_proxy_permissions
[X] 0012_alter_user_first_name_max_length
blog
[X] 0001_initial
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
sessions
[X] 0001_initial
Linguagem de código: texto simples ( texto simples )
Baixe o código fonte do Projeto Django
Resumo
- Use o
makemigrations
comando para fazer migrações com base nas alterações feitas nos modelos. - Use o
migrate
comando para aplicar alterações de modelos ao banco de dados. - Use o
sqlmigrate
comando para visualizar o SQL gerado com base no modelo. - Use o
showmigrations
comando para listar todas as migrações e seus status no projeto.