2016-02-16 8 views
1

Начиная с существующей базы данных, я хочу обновить ее схему. Я меняю одну из своих моделей, затем запускаюDjango migrate не обновит мою базу данных

python manage.py makemigrations myapp 

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

Migrations for 'myapp': 
    0001_initial.py: 
    - Create model Foo 
    - Add field Bar 
    - ... 

Тогда я применяю миграции:

python manage.py migrate --database mydb 

я получаю этот выход:

Operations to perform: 
    Apply all migrations: admin, myapp, contenttypes, sessions, auth 
Running migrations: 
    Rendering model states... DONE 
    Applying admin.0002_logentry_remove_auto_add... OK 
    Applying auth.0007_alter_validators_add_error_messages... OK 

Это, кажется, работает. Гит говорит мне, что файл sqlite, соответствующий «mydb», изменился. Однако вместо внутренних таблиц и столбцов внутри он просто удаляет содержимое, оставляя пустые таблицы со старой схемой.

Что я делаю неправильно?

+0

try: 'python manage.py migrate myapp' –

+0

По умолчанию он попытается применить все возможные миграции (в моем случае только один). – JulienD

ответ

2

Если у вас есть наследие базы данных без миграции прикладных вы должны создать initial migrations без каких-либо изменений:

python manage.py makemigrations myapp 

Затем запустить «поддельные» миграции

python manage.py migrate --database mydb --fake-initial 

После этого вы можете использовать обычные миграции.

+0

Я сделал это '--fake-initial', как вы предлагаете, и я получаю тот же результат, что и выше. После этого 'python manage.py migrate [myapp] -database mydb' сообщает мне« Никаких миграций для применения ». И мои таблицы пустые со старой схемой. – JulienD

+0

Вы удалили все команды 'Alter field' и' add field' из '0001_initial.py'? – ilse2005

+0

Нет, не так ли? Фактически с -fake-initial таблицы не более пусты. Я не знаю, что изменилось в нем, которое обнаруживает Гит. – JulienD

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