Каков наилучший способ переноса 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
После некоторых трудных поисков у меня появилось несколько проблем, которые, я надеюсь, будущие люди найдут для себя полезными.
моя формула
python manage.py dumpdata > datadump.json
- Измените settings.py на ваш mysql
- Убедитесь, что вы можете подключиться к MySQL (разрешения и т. Д.)
python manage.py migrate --run-syncdb
Исключить данные contentype с помощью этого фрагмента
from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()
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:
- python manage.py dumpdata> datadump.json
- Убедитесь, что вы можете подключиться к MySQL (разрешения и т. Д.)
- Убедитесь, что у вас есть привилегии для изменения FOREIGN_KEY_CHECKS (для этого мне пришлось установить и запустить свой личный экземпляр mysql)
- Убедитесь, что движок InnoDB НЕ используется (используйте MyISAM в каждой таблице), иначе следующий шаг не будет работать (молча проваливается)!
- Расслабьте проверку этой командой (это не вступит в силу в InnoDB):
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
- Загрузите таблицу django_site.sql отдельно (при использовании contrib.sites)
- Измените settings.py на ваш новый mysql
- python manage.py migrate --run-syncdb
- Исправьте ошибки syncdb, повернувшись по необходимости, используя каталоги / каталоги кода ваших приложений Django и таблицы БД.
- Исключите данные типа содержимого с помощью этого фрагмента (можно поместить его в основной модуль urls.py):
from django.contrib.contenttypes.models import ContentType
ContentType.objects.all().delete()
quit()
- Если необходимо отредактировать данные JSON, сначала их нужно предварительно обработать:
cat datadump.json | python -m json.tool > datadump_pretty.json
- python manage.py loaddata datadump.json
- Исправить любые проблемы с усечением данных
- Добавить данные часового пояса в базу данных:
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
- Тест сайта работает без предоставления каких-либо данных
- SET GLOBAL FOREIGN_KEY_CHECKS = 1;
- Проверить остальное