2016-07-25 2 views
2

ОК, я в тупике. Кажется, я все пробовал.django.db.utils.OperationalError независимо от того, что я пытаюсь

Я создал модель в приложении models.py, а также добавил еще несколько полей к существующей модели (все со значениями по умолчанию). Затем я побежал makemigrations. Результат:

$ python3 manage.py makemigrations 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/sqlite3/base.py", line 323, in execute 
    return Database.Cursor.execute(self, query, params) 
sqlite3.OperationalError: no such column: myapp_MyExistingModel.first_new_field 

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

Traceback (most recent call last): 
    File "manage.py", line 14, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 398, in execute 
    self.check() 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 426, in check 
    include_deployment_checks=include_deployment_checks, 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/registry.py", line 75, in run_checks 
    new_errors = check(app_configs=app_configs) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/urls.py", line 13, in check_url_config 
    return check_resolver(resolver) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/urls.py", line 23, in check_resolver 
    for pattern in resolver.url_patterns: 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/urlresolvers.py", line 417, in url_patterns 
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/urlresolvers.py", line 410, in urlconf_module 
    return import_module(self.urlconf_name) 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 665, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/path/to/myproject/myproject/urls.py", line 49, in <module> 
    url(r'^someurl/', include('myapp.urls')), 
    File "/usr/local/lib/python3.5/dist-packages/django/conf/urls/__init__.py", line 52, in include 
    urlconf_module = import_module(urlconf_module) 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 665, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/path/to/myproject/myapp/urls.py", line 2, in <module> 
    from . import views 
    File "/path/to/myproject/myapp/views.py", line 8, in <module> 
    existing_model = MyExistingModel.objects.all()[0] 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 297, in __getitem__ 
    return list(qs)[0] 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 258, in __iter__ 
    self._fetch_all() 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 52, in __iter__ 
    results = compiler.execute_sql() 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/sqlite3/base.py", line 323, in execute 
     return Database.Cursor.execute(self, query, params) 
    django.db.utils.OperationalError: no such column: myapp_MyExistingModel.first_new_field 

Если это имеет значение, я использую Мезонин CMS и MyExistingModel является продолжением его Page класса. У этого есть только один случай.

Так вот что я попытался следующим:

  1. manage.py migrate --fake
  2. manage.py flush
  3. переименование моей базы данных, так что новый будет создан

Все они бросили же отслеживающее. Я вошел в последнюю миграцию для приложения. Он содержал AddModel для моей новой модели и RemoveField для поля в старой модели, которую я переименовал, но не AddField для новых полей, которые я создал. Поэтому я добавил их в файл миграции вручную и повторил manage.py migrate --fake. Такая же трассировка. Я также пробовал все остальные команды. Такая же трассировка.

Наконец, я удалил все миграции приложений, оставив только __init__.py. Я также переименовал базу данных, чтобы она была воссоздана. Я повторил flush, makemigrations и migrate--fake). Все это привело к этому TRACEBACK:

Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/sqlite3/base.py", line 323, in execute 
    return Database.Cursor.execute(self, query, params) 
sqlite3.OperationalError: no such table: myapp_MyExistingModel 

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

Traceback (most recent call last): 
    File "manage.py", line 14, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 398, in execute 
    self.check() 
    File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 426, in check 
    include_deployment_checks=include_deployment_checks, 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/registry.py", line 75, in run_checks 
    new_errors = check(app_configs=app_configs) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/urls.py", line 13, in check_url_config 
    return check_resolver(resolver) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/checks/urls.py", line 23, in check_resolver 
    for pattern in resolver.url_patterns: 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/urlresolvers.py", line 417, in url_patterns 
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/usr/local/lib/python3.5/dist-packages/django/core/urlresolvers.py", line 410, in urlconf_module 
    return import_module(self.urlconf_name) 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 665, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/path/to/myproject/myproject/urls.py", line 49, in <module> 
    url(r'^someurl/', include('myapp.urls')), 
    File "/usr/local/lib/python3.5/dist-packages/django/conf/urls/__init__.py", line 52, in include 
    urlconf_module = import_module(urlconf_module) 
    File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 665, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/path/to/myproject/myapp/urls.py", line 2, in <module> 
    from . import views 
    File "/path/to/myproject/myapp/views.py", line 8, in <module> 
    existing_model = MyExistingModel.objects.all()[0] 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 297, in __getitem__ 
    return list(qs)[0] 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 258, in __iter__ 
    self._fetch_all() 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 52, in __iter__ 
    results = compiler.execute_sql() 
    File "/usr/local/lib/python3.5/dist-packages/django/db/models/sql/compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/usr/local/lib/python3.5/dist-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/sqlite3/base.py", line 323, in execute 
    return Database.Cursor.execute(self, query, params) 
django.db.utils.OperationalError: no such table: myapp_MyExistingModel 

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

+0

Почему вы мигрируете - подделываете? Это приведет к тому, что таблицы не будут созданы, что, вероятно, связано с тем, что вы видите это – e4c5

+0

Это был волшебный трюк, который спас меня в последний раз, когда у меня были несоответствия между db и миграциями. Я не думаю, что 'migrate' может работать до' makemigrations', кроме как после редактирования файла миграции вручную. Я просто попробовал «мигрировать» без '--fake' после этого, но это тоже не сработало. Я отредактирую вопрос, чтобы это отразить. – Keith

+0

Вот где фальсификация спасла меня: https://groups.google.com/d/msg/mezzanine-users/wp7TAK2L_Dg/OZXKfHRPAwAJ – Keith

ответ

2

Я понял! Извлеченный урок: прочитайте весь стек, а не только последнюю строку. В этом случае наступательная линия была в моей views.py:

File "/path/to/myproject/myapp/views.py", line 8, in <module> 
    existing_model = MyExistingModel.objects.all()[0] 

Как я уже сказал, MyExistingModel имеет только один экземпляр, и эта линия установить этот экземпляр локальной переменной existing_model для использования в views.py коде.

Я все еще не понимаю, почему makemigrations необходимо будет запустить views.py. Но это так, по-видимому! При этом MyExistingModel был импортирован из models.py, включая новые поля. Но эти области еще не были перенесены. Таким образом, OperationalError.

+1

_ «Комментарии очень оценены» _ - Предлагаю вам открыть новый вопрос, поскольку комментарии не для расширенные обсуждения. –

+0

Это правда.ОК, я переместил дискуссию на [этот пост по reddit] (https://www.reddit.com/r/django/comments/4ut03i/makemigrations_sticking_its_nose_in_my_views/). – Keith

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