Каков наилучший способ переноса Django DB из SQLite в MySQL?

Мне нужно перенести мою базу данных из sqlite в mysql, и различных инструментов / сценариев слишком много, чтобы я мог легко найти самое безопасное и элегантное решение.

Это показалось мне хорошим http://djangosnippets.org/snippets/14/ но, похоже, прошло 3 года с момента получения обновления, которое вызывает беспокойство..

Можете ли вы порекомендовать решение, которое, как известно, является надежным с Django 1.1.1?

3 ответа

Решение

Выполнение:

python manage.py dumpdata > datadump.json

Затем измените файл settings.py на базу данных mysql.

В заключение:

python manage.py loaddata datadump.json

После некоторых трудных поисков у меня появилось несколько проблем, которые, я надеюсь, будущие люди найдут для себя полезными.

моя формула

  1. python manage.py dumpdata > datadump.json
  2. Измените settings.py на ваш mysql
  3. Убедитесь, что вы можете подключиться к MySQL (разрешения и т. Д.)
  4. python manage.py migrate --run-syncdb
  5. Исключить данные contentype с помощью этого фрагмента

    from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()

  6. python manage.py loaddata datadump.json

Надеюсь, что это поможет вам!

Это аккуратный способ избежать ContentType вопросы, описанные в другом месте:

./manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > dump.json

Затем:

./manage.py loaddata dump.json

(Более полный) список шагов, необходимых для перехода от sqlite к MySQL, YMMV:

  1. python manage.py dumpdata> datadump.json
  2. Убедитесь, что вы можете подключиться к MySQL (разрешения и т. Д.)
  3. Убедитесь, что у вас есть привилегии для изменения FOREIGN_KEY_CHECKS (для этого мне пришлось установить и запустить свой личный экземпляр mysql)
  4. Убедитесь, что движок InnoDB НЕ используется (используйте MyISAM в каждой таблице), иначе следующий шаг не будет работать (молча проваливается)!
  5. Расслабьте проверку этой командой (это не вступит в силу в InnoDB):SET GLOBAL FOREIGN_KEY_CHECKS = 0;
  6. Загрузите таблицу django_site.sql отдельно (при использовании contrib.sites)
  7. Измените settings.py на ваш новый mysql
  8. python manage.py migrate --run-syncdb
  9. Исправьте ошибки syncdb, повернувшись по необходимости, используя каталоги / каталоги кода ваших приложений Django и таблицы БД.
  10. Исключите данные типа содержимого с помощью этого фрагмента (можно поместить его в основной модуль urls.py):from django.contrib.contenttypes.models import ContentTypeContentType.objects.all().delete()quit()
  11. Если необходимо отредактировать данные JSON, сначала их нужно предварительно обработать:cat datadump.json | python -m json.tool > datadump_pretty.json
  12. python manage.py loaddata datadump.json
  13. Исправить любые проблемы с усечением данных
  14. Добавить данные часового пояса в базу данных:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -p --protocol=tcpmysql -P 1234 -u root -p -e "flush tables" --protocol=tcp
  15. Тест сайта работает без предоставления каких-либо данных
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. Проверить остальное
Другие вопросы по тегам