Top Banner
@rebelliard Django Migrations
30

Python Dominicana 059: Django Migrations

Apr 15, 2017

Download

Technology

Rafael Belliard
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Python Dominicana 059: Django Migrations

@rebelliard

Django Migrations

Page 2: Python Dominicana 059: Django Migrations

@rebelliard

Rafael Belliard

rebelliard.com

Software Developer

Page 3: Python Dominicana 059: Django Migrations

@rebelliard

“Los requerimientossiempre están mal”

Page 4: Python Dominicana 059: Django Migrations

@rebelliard

El requerimiento perfecto1. El cliente debe entenderlo.

2. El cliente debe mencionarlo.

3. El cliente debe explicarlo correctamente.

4. Debe ser comunicado al programador sin corrupción.

5. Debe ser entendido por el programador.

6. Debe diseñarse un esquema de datos adecuado.

7. Debe implementarse correctamente.

Page 5: Python Dominicana 059: Django Migrations

@rebelliard

La aplicación y el motor de base de datos no deben ser “solo amigos”

Idealmente, esta relación debería estar abierta a otras bases de datos…

Page 6: Python Dominicana 059: Django Migrations

@rebelliard

Django Migrations

Page 7: Python Dominicana 059: Django Migrations

@rebelliard

Concepto

“Hola mundo”

Bases de datos

¿Cómo funciona?

Mirando hacia atrás

Page 8: Python Dominicana 059: Django Migrations

@rebelliard

Django Migrations

Desarrollo iterativo e incremental (“ágil”)

Sistematización del esquema de datos

Sincronización entre la aplicación y el esquema de datos

Control de versiones sobre el esquema

Independencia* del motor de datos

Page 9: Python Dominicana 059: Django Migrations
Page 10: Python Dominicana 059: Django Migrations

@rebelliard

“Hola mundo”

Page 11: Python Dominicana 059: Django Migrations

@rebelliard

Definición del modelo

Page 12: Python Dominicana 059: Django Migrations

@rebelliard

Generamos la migración inicial

Page 13: Python Dominicana 059: Django Migrations

@rebelliard

Alteración del modelo

Page 14: Python Dominicana 059: Django Migrations

@rebelliard

Generamos una nueva migración

Page 15: Python Dominicana 059: Django Migrations

@rebelliard

Comandos disponibles

migrate

makemigrations

showmigrations

sqlmigrate

Page 16: Python Dominicana 059: Django Migrations

@rebelliard

Bases de datos

Page 17: Python Dominicana 059: Django Migrations

@rebelliard

Bases de datos

PostgreSQL

MySQL

SQLite

Oracle

Page 18: Python Dominicana 059: Django Migrations

@rebelliard

PostgreSQL

1. Nada de qué preocuparse.

2. DDL transaccional.

Advertencia al agregar columnas:

null=True

Page 19: Python Dominicana 059: Django Migrations

@rebelliard

MySQL

1. No soporta un DDL transaccional

2. No tiene restricciones CHECK

3. Combina UNIQUE e INDEX

4. ¡Reescrituras completas!

5. Nombres muy pequeños

Page 20: Python Dominicana 059: Django Migrations

@rebelliard

SQLite

1. Alteración de esquemas nulo

2. Terrible para el diseño iterativo

3. No está recomendado en producción

4. Delicado aún para desarrollo

Page 21: Python Dominicana 059: Django Migrations

@rebelliard

Oracle

1. Sintaxis SQL distinta

2. Reglas de nombres problemáticas

3. Limitaciones con TextField

Page 22: Python Dominicana 059: Django Migrations

@rebelliard

¿Microsoft SQL Server?

¿Cassandra?

¿Firebird?

¿ODBC?

Page 23: Python Dominicana 059: Django Migrations

@rebelliard

Ármalo tú mismo…

Page 24: Python Dominicana 059: Django Migrations

@rebelliard

field.deconstruct()

Editor de esquemas

ModelOptions.apps Lector / Grafo

Operaciones

Ejecutor

Optimizador

Autodetector

Estado

Esquema Migraciones

Separación lógica

Page 25: Python Dominicana 059: Django Migrations

@rebelliard

Migración #1

Operación Operación

Migración #2

Operación Operación

Estado Estado Estado Estado Estado

Operación

Estado Estado

AddModel

Sin modelos Un modelo

Page 26: Python Dominicana 059: Django Migrations

@rebelliard

Operaciones incluídas

AddModel DeleteModel

AddField RenameFieldDeleteField

RenameModel

AlterModelOptions AlterModelTable AlterField

AlterUniqueTogether AlterIndexTogether

RunSQL RunPython

Page 27: Python Dominicana 059: Django Migrations

@rebelliard

Mirando hacia atrásCompatibilidad con aplicaciones existentes

Page 28: Python Dominicana 059: Django Migrations

@rebelliard

Simular migraciones

python manage.py makemigrations

python manage.py migrate --fake-initial

Bases de datos existentes

Page 29: Python Dominicana 059: Django Migrations

@rebelliard

South es ignorado

python manage.py makemigrations

python manage.py migrate --fake-initial

Migrando desde South

Page 30: Python Dominicana 059: Django Migrations

@rebelliard

Principios del Manifiesto Ágil

“Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor.”

“Aceptamos que los requisitos cambien, incluso en etapas tardías del desarrollo.”