2010-12-28 9 views
7

Tengo una implementación de Django en producción que usa MySQL.Cómo migrar modelos de Django de mysql a sqlite (o entre dos sistemas de bases de datos)?

Me gustaría hacer un mayor desarrollo con SQLite, así que me gustaría importar mis datos existentes a una base de datos SQLite. I

Hay un script de shell here para convertir un volcado de MySQL general a SQLite, pero no funcionó para mí (aparentemente el problema general no es fácil).

Pensé que hacer esto con los modelos Django debe ser mucho más fácil. ¿Cómo harías esto? ¿Alguien tiene alguna secuencia de comandos para hacer esto?

Respuesta

17

uso

manage.py dumpdata > your_file.json 

para exportar sus datos desde el sistema de producción (docs).

continuación, mueva el archivo en el sistema de desarrollo y ejecutar

manage.py loaddata your_file.json 

También se puede poner el archivo en your_app/carpeta de accesorios con el nombre de "initial_data.json" y se carga automáticamente cuando se ejecuta "Administrar .py syncdb "(docs).

2

¿Ha intentado usar manage.py dumpdata > datadump y luego cuando la nueva base de datos está configurada correctamente, use python manage.py loaddata datadump?

0

Tal vez dar una oportunidad al sur:

http://south.aeracode.org/docs/index.html

+0

al sur es el más adecuado para el esquema migración, no para datos de importación/exportación –

+0

@mosta: las características de migración de esquema de south son excelentes, pero south también tiene buenas capacidades de migración de datos. – mkelley33

1

Si tiene ContentTypes en aplicación instalada

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
) 

Uso guión como lo que para copiar que la entrada a la nueva base:

from django.contrib.contenttypes.models import ContentType 

    def run(): 

     def do(Table): 
      if Table is not None: 
       table_objects = Table.objects.all() 
       for i in table_objects: 
        i.save(using='slave') 

     ContentType.objects.using('slave').all().delete() 

     for i in ContentType.objects.all(): 
      do(i.model_class()) 

Ir al manual de here

+0

Creo que olvidó mencionar algo. Aquí están las cosas que me funcionaron 1) Asegure la configuración correcta (es decir, si no hay ningún tipo de contenido que la agregue). luego 'python manage.py syncdb --database slave' o' python manage.py migrate --database slave'. 2) Escribe la función 'run()' en algún lugar. 3) Llamar desde 'python manage.py shell' o crear un comando personalizado django (https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/)[https://docs.djangoproject .com/es/1.9/howto/custom-management-commands /] y úsala. –

+0

Creo que esto funcionará con otros dbs también. –

+0

Esa es una respuesta bastante obsoleta. Los últimos Django tienen una mejor versión de 'dumpdata', por lo que no es necesario que hagas una solución personalizada para alternar entre los DB. – inoks

Cuestiones relacionadas