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

Миграция приборов Django?

У меня есть приложение Django. У меня есть файлы .json fixture, содержащие тестовые данные, с модульными тестами, которые используют данные для подтверждения того, что приложение работает правильно. Я также использую Юг для переноса моей базы данных.

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

Какой лучший способ переместить мои объекты вперед, когда я переношу свою базу данных?

4b9b3361

Ответ 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']
                ...
                )

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