Migrações Django

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 makemigrationscomando.
  • Terceiro, aplique as alterações dos modelos ao banco de dados executando o migratecomando.

Suponha que você defina os Postmodelos no blogaplicativo 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.titleLinguagem de código:  Python  ( python )

e você pode criar uma nova migração usando o makemigrationscomando:

python manage.py makemigrationsLinguagem de código:  CSS  ( css )

O makemigrationscomando verifica o models.pyarquivo, 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 PostLinguagem de código:  texto simples  ( texto simples )

Nos bastidores, o comando cria o migrations\0001_initial.pyarquivo file.

Para visualizar o SQL que o Django irá executar para criar a blog_posttabela no banco de dados, você usa o sqlmigratecomando:

python manage.py sqlmigrate blog 0001Linguagem de código:  CSS  ( css )

Neste sqlmigratecomando, 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 migratecomando:

python manage.py migrateLinguagem 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 Postmodelo, 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 migratecomando 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 showmigrationscomando:

python manage.py showmigrationsLinguagem 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_initialLinguagem de código:  texto simples  ( texto simples )

Baixe o código fonte do Projeto Django

Resumo

  • Use o makemigrationscomando para fazer migrações com base nas alterações feitas nos modelos.
  • Use o migratecomando para aplicar alterações de modelos ao banco de dados.
  • Use o sqlmigratecomando para visualizar o SQL gerado com base no modelo.
  • Use o showmigrationscomando para listar todas as migrações e seus status no projeto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *