2016-07-06 4 views
1

Я видел довольно несколько сообщений об этом, но пока никто не помог мне. У меня есть рабочее приложение django, и я хочу перейти из sqlite в базу данных postgresql. Для этого я следую учебнику djangogirls, который велик, пока не произойдет некоторая ошибка.django sqlite to postgresql ПрограммированиеError при миграции

Я загрузил postgresql на свой компьютер для разработки, затем загрузил и установил psycopg2, который работает нормально, я изменил конфигурацию базы данных settings.py DB, и я нахожусь в точке, где я хочу перейти к postgres.

Все, что они говорят в учебнике, это запустить «python manage.py migrate», что не сработало для меня, вероятно, потому что они считают, что это пустое приложение или что-то еще, и у меня уже есть миграции и связанные с ним модели ,

Я читал, что работает

python manage.py makemigrations 
python manage.py migrate 

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

python manage.py makemigrations 
python manage.py migrate --fake 

раскомментировать и запустить

python manage.py migrate 

который я пытался, но теперь я получаю ту же ошибку как моя пользовательская модель, но для приложения contenttypes.

отслеживающего это:
("ло отношение 'django_content_type' n'existe па" = "отношение 'django_content_type' не существует")

Operations to perform: 
    Apply all migrations: auth, contenttypes, sessions, admin 
Running migrations: 
    No migrations to apply. 
Traceback (most recent call last): 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\backends\utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: ERREUR: la relation « django_content_type » n'existe pas 
LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co... 
                  ^

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\contrib\contenttypes\models.py", line 67, in get_for_model 
    ct = self.get(app_label=opts.app_label, model=opts.model_name) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\manager.py", line 122, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\query.py", line 381, in get 
    num = len(clone) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\query.py", line 240, in __len__ 
    self._fetch_all() 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\query.py", line 52, in __iter__ 
    results = compiler.execute_sql() 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\models\sql\compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\backends\utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\backends\utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\utils\six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\db\backends\utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: ERREUR: la relation « django_content_type » n'existe pas 
LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co... 
                  ^


During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\base.py", line 399, in execute 
    output = self.handle(*args, **options) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle 
    emit_post_migrate_signal(self.verbosity, self.interactive, connection.alias) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\core\management\sql.py", line 50, in emit_post_migrate_signal 
    using=db) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\dispatch\dispatcher.py", line 192, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\contrib\auth\management\__init__.py", line 85, in create_permissions 
    ctype = ContentType.objects.db_manager(using).get_for_model(klass) 
    File "C:\Users\gbastien1\Envs\django-carte\lib\site-packages\django\contrib\contenttypes\models.py", line 80, in get_for_model 
    "Error creating new content types. Please make sure contenttypes " 
RuntimeError: Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually. 

Моих миграций выглядеть следующим образом:

admin 
[X] 0001_initial 
[X] 0002_logentry_remove_auto_add 
auth 
[X] 0001_initial 
[X] 0002_alter_permission_name_max_length 
[X] 0003_alter_user_email_max_length 
[X] 0004_alter_user_username_opts 
[X] 0005_alter_user_last_login_null 
[X] 0006_require_contenttypes_0002 
[X] 0007_alter_validators_add_error_messages 
contenttypes 
[X] 0001_initial 
[X] 0002_remove_content_type_name 
sessions 
[X] 0001_initial 

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

EDIT Я попытался возвращаясь всеми мои изменения в ту часть, где мое приложение работало и начать заново, удалив мой файл SQLite и все мои миграции, я удалил все мои PYC файлов (кэш питона), закомментировано весь код связанный с моделью Ecole, а затем снова мигрировать, и я все еще получаю такую ​​же ошибку :(

+0

Вы хотите сохранить свои данные в sqlite? И что делает 'python manage.py migrate contenttypes'? –

+0

Я не против потерять свои данные из sqlite, и эта команда выводит ту же ошибку, что упоминалось выше:/ –

+0

Вы можете редактировать вопрос вместо добавления новой информации в ответы. – marcanuy

ответ

0

Вы можете dump your data into json, удалите свой sqlite-файл, а затем выполните миграцию проекта с помощью postgres set up as a DB.

Пример рабочего процесса может выглядеть следующим образом:

mkdir <app name>/fixtures

python manage.py dumpdata >> <app name>/fixtures/all_data.json

rm <sqlite file>.db

python manage.py migrate

python manage.py loaddata <app name>/fixtures/all_data.json

Где <app name> - это имя вашего основного приложения (или любого каталога действительно) и <sqlite file> - это имя вашего файла sqlite.

+0

Это не работает больше, чем наоборот. (Когда я пытаюсь выполнить dumpdata, я получаю ошибку, подобную той, которую я упомянул: 'CommandError: невозможно выполнить сериализацию базы данных: Ошибка: отношение" django_content_type "doesn ' t exist' –

+0

Вам нужно сохранить свои данные – marcusshep

+0

Ну, теперь, когда я думаю об этом, на самом деле, потому что я загружаю свои данные из файла Excel при загрузке приложения. –

0

Ну, наконец, я нашел небольшое сообщение в stackoverflow, в котором говорилось, что psycopg2 должен быть в INSTALLED_APPS в моих settings.py. Я добавил, что он снова пробежал

python manage.py migrate 

и все прошло отлично! Спасибо тем, кто ответил, но это очень ценится!

Хотя теперь я получаю сообщение об ошибке, которое я получил, прежде чем комментировать весь код, относящийся к модели «Ecole». Он очень похож на contentypes одного:

programmingError: ERROR: relation "carte_interactive_ecole" does not exist 

Где «carte_interactive» мое имя приложения, и «Эколь» моя модель.

У кого-нибудь есть еще одна идея для меня? Почему я не могу перенести мою модель, когда есть код, который ссылается на нее? Если я закомментировать весь код Ecole, это хорошо ...

EDIT
Я обнаружил, что если я закомментировать код в apps.py готов() Я могу перенести мое приложение, но это, вероятно, не полностью переносится с тех пор, как я запускаю свое приложение, и я делаю что-то, что использует базу данных, я получаю ту же ошибку, что и выше. :/

+0

Попробуйте удалить все из ваших 'миграций', кроме файлов' __init __. Py'. Затем запустите 'python manage.py makemigrations' снова, а затем' python manage.py migrate'. –

+0

Произошло это, не получилось:/все равно повторяйте одни и те же ошибки снова и снова. –

0

Так я отправляю это как ответ, потому что это слишком долго для комментария:

Я закомментированного код в apps.py, который использует свою модель (это, вероятно, использует его, прежде чем переходить так что модель делает . еще не существует Тогда я побежал makemigrations, и я получил:

Migrations for 'carte_interactive': 
    001_initial.py: 
     -Create model Ecole 
     -Create model ExcelFile 

Какие мои две модели и кажется прекрасным

Тогда я побежал мигрировать, и получил

apply all migrations: admin, carte_interactive, [...] 
Running Migrations: No migrations to apply. 
01.

И когда я showmigrations, все проверено, так что все будет сделано, кажется, хотя я пытался вчера с --fake так может быть, что он проверил их, но не создать несколько таблиц ...

EDIT (РЕШЕНИЕ)
ОК, поэтому вся проблема была в первую очередь в том, что psycopg2 не был включен в мой INSTALLED_APPS в settings.py, поэтому таблицы не могли быть созданы в postgresql или что-то в этом роде.

А также, я начал перемещение, полностью удалив базу данных и воссоздав ее (например, сбросив все таблицы, но проще). Затем другая проблема заключалась в том, что код в apps.py запускался до миграции, поэтому мне пришлось прокомментировать его перед запуском миграции. После всего этого, запуская makemigrations и мигрируя с прокомментированным кодом, а затем раскомментируйте и запустите приложение, работающее как шарм! Спасибо всем, кто ответил, действительно оценили!

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