Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PythonXP 2020 - Django Migrations: para entender e perder o medo

PythonXP 2020 - Django Migrations: para entender e perder o medo

Você está começando com Django e quer entender como funciona e também como aproveitar o framework de migrações do Django da melhor maneira? Vou explicar como utilizar as migrações para resolver alguns cenários comuns - e outros não tão comuns assim - que enfrentamos com exemplos simples e práticos.

Kátia Nakamura

June 23, 2020
Tweet

More Decks by Kátia Nakamura

Other Decks in Technology

Transcript

  1. @KatiaNakamura South: lidar com outros tipos de mudanças • alteração

    • remoção Criado por Andrew Godwin Django < 1.7
  2. @KatiaNakamura Migrations: lidar com vários tipos de mudanças • adição

    • alteração • remoção • etc. Criado por Andrew Godwin Django >= 1.7
  3. from django.db import models class Booking(models.Model): … class Airline(models.Model): …

    class Airport(models.Model): … class Flight(models.Model): … class Passenger(models.Model): … @KatiaNakamura
  4. from django.db import migrations, models import django.db.models.deletion def remove_bus_operators (apps,

    schema_editor): ... def load_bus_operators (apps, schema_editor): …. class Migration(migrations.Migration): replaces = [( 'core', '0001_initial' ), ('core', '0002_auto_20200622_1752' ), ('core', '0003_auto_20200622_2001' ), ('core', '0004_auto_20200622_2001' ), ('core', '0005_carrier_type' ), ('core', '0006_auto_20200622_2150' ), ('core', '0007_auto_20200622_2151' ), ('core', '0008_auto_20200622_2158' )] initial = True dependencies = [ ] ... operations = [ migrations.RunPython( code=load_bus_operators , reverse_code=remove_bus_operators , ), ... ] @KatiaNakamura
  5. class Migration(migrations.Migration): """ Add index ... """ atomic = False

    dependencies = [(...', '0080_add_indexes')] operations = [ migrations.RunSQL( sql=""" CREATE INDEX CONCURRENTLY IF NOT EXISTS "…." ON "..." ("..."); """, reverse_sql="", ) ] @KatiaNakamura Django 1.11
  6. from django.contrib.postgres.operations import AddIndexConcurrently from django.db import migrations, models class

    Migration(migrations.Migration): dependencies = [ ('core', '0001_squashed_0008_auto_20200622_2158'), ] operations = [ AddIndexConcurrently( model_name='segment', index=models.Index(fields=['departure_time_utc'], name='core_segmen_departu_ee4e9a_idx'), ), AddIndexConcurrently( model_name='segment', index=models.Index(fields=['arrival_time_utc'], name='core_segmen_arrival_6bc9e9_idx'), ), ] @KatiaNakamura Django 3.0