2015-01-28 4 views
0

Прошу прощения, если имя вопроса вводит в заблуждение, но вот сделка.Как получить новый код django со старой базой данных?

У меня есть база данных, которая использовалась со старой версией приложения django (django < 1.7).

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

Как я думал, что это будет работать:

Восстановление базы данных, запустить новую миграцию (1.7) Миграции с ./manage.py мигрируют.

Выполнено!

Но когда я выполняю миграцию, у меня есть «Relation уже существует ошибка».

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

EDIT1 Я считаю, что единственный способ вручную создать сценарий миграции или что-то еще, потому что теперь есть возможность синхронизировать базу данных с новыми миграциями.

Итак, предположим, что у таблицы есть таблица с именем TABLE и два столбца C1 и C2.

Теперь, когда я переходил с 1,6 до 1,7, я добавил столбец C3. Таким образом, первоначальная миграция выглядит примерно так: «create table TABLE with COLUMNS C1, C2, C3».

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

ответ

0
  1. Удалить новые столбцы.
  2. Создайте начальные миграции.
  3. Поддельные начальные миграции для всех приложений:

    python manage.py migrate --fake yourappnamehere 0001 
    
  4. Добавить столбцы, создавать новые миграции.
  5. Выполнение новых миграций.
+0

Хм ... Я не знаю, какие столбцы новы. Поэтому для этого потребуется ручная проверка. Не вариант. 2. У меня уже есть миграции. Зачем мне нужно создать еще один? Разве это не сломает еще одну миграцию? – user1685095

+0

1. Вы можете создать модели django из существующей базы данных: 'python manage.py inspectdb> models.py' и проверить, какие столбцы являются новыми. Если вы db действительно огромны, вы можете написать простой синтаксический анализатор, который будет сравнивать ваши модели и генерироваться с вашей базы. 2. Насколько я понимаю, ваши текущие миграции не соответствуют базе данных, поэтому их необходимо удалить. – zymud

+0

Нет, их не нужно удалять. База данных должна быть изменена на состояние, в котором она будет соответствовать новым переходам, а не иначе =) – user1685095

Смежные вопросы