Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Execute:

python manage.py dumpdata > datadump.json

Затем измените ваши settings.py на базу данных mysql.

Наконец:

python manage.py loaddata datadump.json

Ответ 2

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

моя формула

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

    python manage.py shell

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

  6. python manage.py loaddata datadump.json

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

Ответ 3

(Более полный) список шагов, необходимых для перехода от 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 ContentType ContentType.objects.all().delete() quit()
  11. Если необходимо отредактировать данные json, сначала их нужно предварительно cat datadump.json | python -m json.tool > datadump_pretty.json: cat datadump.json | python -m json.tool > datadump_pretty.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=tcp mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -P --Protocol=tcp mysql -P 1234 -u root -P -e "flush tables" --Protocol=tcp
  15. Тестирование сайта работает без предоставления каких-либо данных
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. Проверить остальные

Ответ 4

Это более удобный способ избежать описанных выше проблем с ContentType:

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

Затем:

./manage.py loaddata dump.json