Cuál es la mejor manera de migrar datos en django


Después de hacer algunos cambios en mis modelos (por ejemplo. 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?


PD: Quería ver muchas soluciones en un solo lugar clasificado. Aparentemente más soluciones ya están listadas aquí.

Author: Community, 2008-10-07

6 answers

He hecho una pregunta similar aquí y obtuve bastantes respuestas.

Hay muchas maneras de hacerlo, como hacer manualmente el volcado y la recarga con SQL, usando accesorios o usando uno de los paquetes schema-evolution "emergentes"para Django:

 16
Author: Farinha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:53

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

  1. python manage.py dumpdata > dump.json
  2. Con una herramienta externa, elimine las tablas afectadas o elimine toda la base de datos
  3. python manage.py loaddata dump.json

Véase manage.py docs para más.

 23
Author: shacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-18 00:28:14

Depende del alcance de los cambios. Si está más allá de un ALTER, vas a hacer una cirugía mayor. Hacer copias de seguridad del modelo, así como la base de datos para que pueda volver.

Mi preferencia es poner 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. Crear pruebas, solo para asegurarse de que funciona.
  2. syncdb para construir esta implementación provisional de la nueva modelo.
  3. Escriba una pequeña utilidad de una sola vez para consultar su modelo antiguo y cargar su nuevo modelo. Es posible que desee probar esto en SQL puro. Prefiero escribir una consulta simple, construir y guardar bucle.
  4. Después de cargar el nuevo modelo, puede volcar esto a un archivo JSON.

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

  1. Mueva el nuevo modelo a su aplicación existente.
  2. Eliminar las versiones antiguas de la tablas de aplicación.
  3. syncdb para construir las nuevas tablas.
  4. Cargue el archivo JSON con los datos.
 3
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 20:37:24

Django ahora tiene sus propias migraciones integradas, documentadas en:

Https://docs.djangoproject.com/en/dev/topics/migrations /

 3
Author: Stian Jensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-11 22:07:18

Mira con manage.py sqlall cuáles son los parámetros para las nuevas columnas y añadirlos manualmente en su base de datos con instrucciones Alter table. De esta manera no tiene que rehacer su base de datos; sin embargo, requiere algo de conocimiento de SQL...

Eche un vistazo aquí (Desplácese hacia abajo hasta "Hacer cambios en un Esquema de base de datos")

 2
Author: fijter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 20:34:43

Perform these steps in order may help you:

For more details,

Haga clic aquí: http://south.readthedocs.org/en/latest /

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

El paso anterior crea la carpeta de migración como predeterminada.

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

Genera una migración falsa.

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

Luego puede agregar campos como desee y realizar el comando anterior.

4) python manage.py migrate apps.appname

Luego migra los archivos a la base de datos.

 0
Author: Vijesh Venugopal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-17 09:46:40