Каков наилучший способ переноса Django DB из SQLite в MySQL? - PullRequest
38 голосов
/ 14 июня 2010

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

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

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

Ответы [ 4 ]

72 голосов
/ 14 июня 2010

Выполнить:

python manage.py dumpdata > datadump.json

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

Наконец:

python manage.py loaddata datadump.json
36 голосов
/ 08 декабря 2016

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

Моя формула

  1. python manage.py dumpdata > datadump.json
  2. Изменитьsettings.py к вашему mysql
  3. Убедитесь, что вы можете подключиться к своему mysql (разрешения и т. д.)shell

    python manage.py shell

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

  4. python manage.py loaddata datadump.json

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

0 голосов
/ 13 июля 2019

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

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

Тогда:

./manage.py loaddata dump.json
0 голосов
/ 04 ноября 2018

(более полный) список шагов, необходимых для перехода с 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
  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 -P 1234 -u root -p -e "flush tables" --protocol=tcp
  15. Проверка работоспособности сайта без предоставления каких-либо данных
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. Проверка остальных
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...