Django - делаем дамп базы данных и восстанавливаем из него с dumpdata и loaddata

Сколько лет пишу на django, и только недавно внезапно обнаружил, что у неё оказывается есть встроенные стредства для дампа и последующего восстановления схемы базы данных. Это бывает довольно полезно, когда надо по быстрому кому-то передать дамп с тестовыми данными чтобы воспроизвести проблему, или просто передать фикстуры.

Экспорт (дамп) с dumpdata

dumpdata - это встроенная команда django, с помощью которой можно сделать бэкап (экспорт) текущих моделей базы данных или всей базы данных.

Синтаксис крайне простой. Следующая команда сделает дамп всей базы данных (всех приложений):

./manage.py dumpdata > db.json

После этого в директории с проектом появится файл содержащий описание моделей и сами модели в json формате.

Так же можно сделать дамп моделей определенного приложения:

./manage.py dumpdata admin > admin.json

И дамп определенной таблицы:

./manage.py dumpdata admin.logentry > admin_logentry.json

Команда выше экспортирует таблицу admin.logentry.

Так же есть возможность исключить таблицы . Следующая команда экспортирует всю базу данных кроме таблицы auth.permission:

./manage.py dumpdata --exclude auth.permission > db.json

По-умолчанию данные экспортируются в одну строку, без какого либо форматирования. Это не очень удобно для чтения человеком, поэтому можно указать отстуступы с помощью ключа --indent. Следующая команда экспортирует таблицу auth.user в более удобном для восприятия человека виде:

./manage.py dumpdata auth.user --indent 2 > db.json

В результате выполнения этой команды создастся файл db.json с примерно таким содержимым:

С помощью опции --format можно указать другой формат для экспортируемого файла.

Доступны следующие форматы:

  • xml
  • yaml (требуется дополнительно установить модуль yaml)
  • json

Например, если следующая команда:

./manage.py dumpdata auth.user --indent 2 --format yaml > db.json

Экспортирует таблицу auth.user в файл с формате yaml:

Импорт (восстановление) с loaddata

Команда loaddata позволяет загрузить фикстуры (экспортированные с помощью dumpdata данные). Синтаксис так же крайне прост:

./manage.py loaddata db.json

Восстановление всей базы данных

Если вы попробуете сделать экспортировать данные на одном ПК, и восстановить на другом, то у вас ничего не выйдет. В процессе будет "выброшено" исключение IntegrityError. При этом на том же ПК, на котором был сделан экспорт - все будет импортироваться прекрасно. Чтобы избежать этой проблемы, из экспорта необходимо исключить таблицы contenttypes и auth.permissions:

./manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

После этого импорт должен пройти без проблем:

./manage.py loaddata db.json


Понравилась статья? Поделись с друзьями!




Комментарии на этом сайте требуют включенного Javascript в вашем браузере. Вероятно, ваш браузер не поддерживает Javascript, или он был отключен по каким-то причинам. Если вы хотите прокомментировать пост, или просто почитать комментарии, то пожалуйста, включите Javascript или попробуйте открыть эту страницу другим браузером.