python dominicana 059: django migrations

30
@rebelliard Django Migrations

Upload: rafael-belliard

Post on 15-Apr-2017

484 views

Category:

Technology


1 download

TRANSCRIPT

@rebelliard

Django Migrations

@rebelliard

Rafael Belliard

rebelliard.com

Software Developer

@rebelliard

“Los requerimientossiempre están mal”

@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.

@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…

@rebelliard

Django Migrations

@rebelliard

Concepto

“Hola mundo”

Bases de datos

¿Cómo funciona?

Mirando hacia atrás

@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

@rebelliard

“Hola mundo”

@rebelliard

Definición del modelo

@rebelliard

Generamos la migración inicial

@rebelliard

Alteración del modelo

@rebelliard

Generamos una nueva migración

@rebelliard

Comandos disponibles

migrate

makemigrations

showmigrations

sqlmigrate

@rebelliard

Bases de datos

@rebelliard

Bases de datos

PostgreSQL

MySQL

SQLite

Oracle

@rebelliard

PostgreSQL

1. Nada de qué preocuparse.

2. DDL transaccional.

Advertencia al agregar columnas:

null=True

@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

@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

@rebelliard

Oracle

1. Sintaxis SQL distinta

2. Reglas de nombres problemáticas

3. Limitaciones con TextField

@rebelliard

¿Microsoft SQL Server?

¿Cassandra?

¿Firebird?

¿ODBC?

@rebelliard

Ármalo tú mismo…

@rebelliard

field.deconstruct()

Editor de esquemas

ModelOptions.apps Lector / Grafo

Operaciones

Ejecutor

Optimizador

Autodetector

Estado

Esquema Migraciones

Separación lógica

@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

@rebelliard

Operaciones incluídas

AddModel DeleteModel

AddField RenameFieldDeleteField

RenameModel

AlterModelOptions AlterModelTable AlterField

AlterUniqueTogether AlterIndexTogether

RunSQL RunPython

@rebelliard

Mirando hacia atrásCompatibilidad con aplicaciones existentes

@rebelliard

Simular migraciones

python manage.py makemigrations

python manage.py migrate --fake-initial

Bases de datos existentes

@rebelliard

South es ignorado

python manage.py makemigrations

python manage.py migrate --fake-initial

Migrando desde South

@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.”