2010-12-28 5 views
7

У меня есть развертывание Django в производстве, которое использует MySQL.Как перенести модели Django из mysql в sqlite (или между любыми двумя системами баз данных)?

Я хотел бы продолжить разработку с помощью SQLite, поэтому я хотел бы импортировать существующие данные в базу данных SQLite. I

Существует сценарий оболочки here для преобразования общего дампа MySQL в SQLite, но для меня это не сработало (по-видимому, общая проблема непростая).

Я решил, что делать это с использованием моделей Django должно быть намного проще. Как бы вы это сделали? У кого-нибудь есть сценарий для этого?

ответ

17

использование

manage.py dumpdata > your_file.json 

экспортировать данные из системы производства (docs).

Затем переместите файл в системе разработки и запуска

manage.py loaddata your_file.json 

Вы также можете поместить файл в your_app/папке светильников с именем «initial_data.json», и он будет автоматически загружаться при запуске «управлять .py syncdb "(docs).

2

Вы пробовали использовать manage.py dumpdata > datadump, а затем, когда новая база данных настроена правильно, используйте python manage.py loaddata datadump?

0

Может дать юг попробовать:

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

+0

юг лучше всего подходит для схемы миграция, а не данные импорта/экспорта –

+0

@mosta: особенности миграции схемы на юге превосходны, но на юге также имеются хорошие возможности переноса данных. – mkelley33

1

Если у вас есть ContentTypes в установленном приложении

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

Использовать сценарий как то, что для копирования вам входа в новую базу:

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()) 

Посмотреть полный руководство here

+0

Я думаю, вы забыли упомянуть что-то. Вот что сработало для меня: 1) Обеспечьте правильные настройки (т. Е. Если никакие типы контента не добавят его). затем 'python manage.py syncdb --database slave' или' python manage.py migrate --database slave'. 2) Напишите функцию 'run()' some where. 3) Назовите его из 'python manage.py shell' или создайте пользовательскую команду django (https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/)[https://docs.djangoproject .com/ru/1.9/howto/custom-management-commands /] и использовать его. –

+0

Я считаю, что это будет работать и с другими dbs. –

+0

Это довольно устаревший ответ. В последнем Django есть лучшая версия 'dumpdata', поэтому вам не нужно настраивать решение для переключения между DB. – inoks