2008-10-06 20 views
27

Después de hacer algunos cambios en mis modelos (por ejemplo, un nuevo campo en un modelo y un nuevo modelo) ¿cuál es la mejor manera de reflejar estos cambios en mi base de datos poblada?¿Cuál es la mejor manera de migrar datos en django


PD: Quería ver muchas soluciones en un solo lugar. Aparentemente, hay más soluciones ya enumeradas here.

Respuesta

16

he hecho una pregunta similares here y consiguió un buen número de respuestas.

Hay un montón de maneras de hacerlo, como hacer manualmente el dumping y recarga con SQL, utilizando los accesorios o el uso de uno de los "emergentes" paquetes esquema de evolución para Django:

3

Depende del alcance de los cambios. Si está más allá de ALTER, estás haciendo una cirugía mayor. Realice copias de seguridad del modelo y de la base de datos para que pueda regresar.

Mi preferencia es colocar su nuevo modelo (revisado, corregido, expandido) como una NUEVA aplicación. No tendrá URL ni nada, solo un modelo.

  1. Creando el nuevo modelo como una nueva aplicación. Crea pruebas, solo para asegurarte de que funciona.
  2. syncdb para construir esta implementación provisional del nuevo modelo.
  3. Escriba una pequeña utilidad de una sola vez para consultar su modelo anterior y cargue su nuevo modelo. Es posible que desee probar esto en SQL puro. Prefiero escribir una consulta simple, construir y guardar el bucle.
  4. Después de cargar el nuevo modelo, puede volcarlo en un archivo JSON.

Una vez que haya extraído los datos de su modelo anterior, puede reconstruir su base de datos en el formato nuevo preferido.

  1. Mueva el nuevo modelo a su aplicación existente.
  2. Elimine las versiones anteriores de las tablas de la aplicación.
  3. syncdb para compilar las nuevas tablas.
  4. Cargue el archivo JSON con los datos.
2

Mire con manage.py sqlall cuáles son los parámetros para las nuevas columnas y agréguelos manualmente en su base de datos con Alter table statements. De esta manera no tienes que volver a hacer tu base de datos; Se requiere un cierto conocimiento de SQL, aunque ...

Tome una mirada here (vaya a "Realizar cambios en un esquema de base de datos")

23

Otra técnica es usar los argumentos dumpdata y loaddata para administrar.py, matando a su base de datos en el medio:

  1. python manage.py dumpdata > dump.json
  2. Con una herramienta externa, la caída de las tablas afectadas, o matar a toda la db
  3. python manage.py loaddata dump.json

Ver manage.py docs por más.

+0

'python manage.py sqlreset appname' Imprime las sentencias SQL necesarias, pero en realidad no ejecutarlos. –

+0

Tienes razón Vebjorn - gracias, arreglado. – shacker

+0

Buena solución. Gracias. En nuestro caso, en Django 14, necesitamos crear una base de datos vacía antes de cargar los dispositivos. El DB puede ser creado por syncdb, sin embargo, los tipos de contenido creados automáticamente deben ser eliminados manualmente, antes de cargar el volcado. –

0

Perform these steps in order may help you:

For more details,

clickhere: http://south.readthedocs.org/en/latest/

1) python manage.py schemamigration apps.appname --initial

Por encima de paso crea carpeta de la migración como predeterminado.

2) python manage.py migrate apps.appname --fake

genera una migración falso.

3) python manage.py schemamigration apps.appname --auto

A continuación, puede añadir campos como desee y realizar el comando anterior.

4) python manage.py migrate apps.appname

continuación, migrar los archivos de la base de datos.

Cuestiones relacionadas