Миграция с юга на django 1.8 поднимает таблицу уже существующую

У меня есть проект, работающий на django 1.6, и я работаю над его обновлением до 1.8, что включает в себя переход с южной миграции на миграцию django.

Я попытался выполнить шаги, упомянутые в документации django, о том, как обновить миграции с юга на django здесь https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south

& я столкнулся с проблемой при попытке миграции --initial-fake, похоже, что хотя некоторые таблицы существуют, миграция django пытается их создать

./manage.py migrate --fake-initial 


Running migrations:
  Rendering model states... DONE
  Applying retail.0001_initial... FAKED
  Applying contenttypes.0001_initial... FAKED
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... FAKED
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying account.0001_initial... FAKED
  Applying default.0001_initial...Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/project-path/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/project-path/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/project-path/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/project-path/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute
    output = self.handle(*args, **options)
  File "/project-path/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 222, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
  File "/project-path/lib/python2.7/site-packages/django/db/migrations/executor.py", line 110, in migrate
    self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial)
  File "/project-path/lib/python2.7/site-packages/django/db/migrations/executor.py", line 148, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/project-path/lib/python2.7/site-packages/django/db/migrations/migration.py", line 115, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/project-path/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 59, in database_forwards
    schema_editor.create_model(model)
  File "/project-path/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 286, in create_model
    self.execute(sql, params or None)
  File "/project-path/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 111, in execute
    cursor.execute(sql, params)
  File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/project-path/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
django.db.utils.ProgrammingError: relation "social_auth_association" already exists

Любые советы, пожалуйста?

с уважением,


person Mo J. Mughrabi    schedule 22.08.2015    source источник


Ответы (2)


Из документации:

Единственная сложность возникает, если у вас циклическая зависимость внешних ключей; в этом случае makemigrations может выполнить более одной начальной миграции, и вам нужно будет пометить их все как примененные, используя:

python manage.py migrate --fake yourappnamehere

Так что попробуй запустить

python manage.py migrate --fake default

И это должно сработать.

person zanderle    schedule 22.08.2015
comment
но я не сталкиваюсь с круговой зависимостью, он проходит эту точку и начинается выполнение миграции, а затем по какой-то причине он пытается создать таблицу, которая действительно существует - person Mo J. Mughrabi; 23.08.2015
comment
Таким образом, вы получаете ту же ошибку, если применяете миграцию только для этого конкретного приложения? Возможно, вы внесли какие-то изменения в модели перед запуском makemigrations? - person zanderle; 23.08.2015
comment
Собственно zanderle, оказалось то что вы предлагали правильно и получилось, просто нужно было удалить pyc файлы - person Mo J. Mughrabi; 15.09.2015

Введите python manage.py migrate --help

--fake         Mark migrations as run without actually running them.

--fake-initial Detect if tables already exist and fake-apply initial
               migrations if so. Make sure that the current database
               schema matches your initial migration before using
               this flag. Django will only check for an existing
               table name.
person GrvTyagi    schedule 18.09.2015