Миграция приборов Django?
У меня есть приложение Django. У меня есть файлы .json fixture, содержащие тестовые данные, с модульными тестами, которые используют данные для подтверждения того, что приложение работает правильно. Я также использую Юг для переноса моей базы данных.
После выполнения нескольких миграций базы данных мои светильники устарели, потому что база данных мигрировала, добавив, например, новый столбец базы данных, и данные прибора не имеют этого столбца, поскольку он был захвачен перед базой данных изменилось.
Какой лучший способ переместить мои объекты вперед, когда я переношу свою базу данных?
Ответы
Ответ 1
В этом процессе я использовал:
-
Отбросьте код на версию, которая создала прибор в первую очередь. Например: svn up -r12345
.
-
Очистите базу данных, затем создайте ее с помощью manage.py syncdb --noinput --migrate
-
Загрузите прибор с помощью manage.py loaddata my_fixture.json
-
Теперь переместите код вперед, svn up
-
Перенесите базу данных с помощью manage.py migrate
-
Сбросьте данные с помощью manage.py dumpdata --indent=2 myapp >my_fixture.json
Обратите внимание, что вам нужно быть осторожным при выборе предыдущей версии для возврата назад. В моем случае у меня были некоторые недавние исправления, которые должны были быть на месте, поэтому мне действительно нужно было выбирать и выбирать каталоги для возврата к конкретным версиям. Нужна, но лучше, чем вручную редактировать 9-тысячный файл JSON.
Кроме того, на шаге 6 обязательно выгрузите правильный набор приложений.
В будущем, когда я пишу миграции, я могу сделать эти шаги еще раз, чтобы обновить все приборы.
Ответ 2
Почему вы не можете просто создать свежий файл .json
из своего db. Это то, что я делаю, когда мне нужно создать новое приспособление.
python manage.py dumpdata <your_app> auth > test_data.json
Ответ 3
Какой лучший способ переместить мои объекты вперед, когда я переношу свою базу данных?
Слишком поздно.
При миграции вашей базы данных вам нужно loaddata
и dumpdata
.
Один из них перестает работать, слишком поздно.
Возможная ошибка заключается в том, чтобы написать короткий script для загрузки JSON-светильников в память,
а затем "вручную" создавать объекты базы данных.
with open( "somefile.json", "r" ) as data:
for obj in json.load( data ):
if obj['model'] == 'someapp.somemodel':
SomeNewModel.objects.create(
field = obj['fields']['element']
...
)
С чем-то в этих строках вы можете построить базу данных, используя вашу текущую схему и устаревшие светильники.