Ответ 1
Я только что столкнулся с этим сам, похоже, он связан с https://code.djangoproject.com/ticket/29182. Сейчас вы можете просто понизить версию sqlite до версии 2.6 (например, 2.5.1).
Я следовал первому руководству по приложениям из официальных документов Django и получил эту ошибку при попытке сохранить некоторые изменения, сделанные через страницу администратора. Я провел некоторые исследования, но возможные решения, которые я смог найти, такие как перенос базы данных, просто не сработают. Просто дайте мне знать, если вы хотите увидеть какую-то конкретную часть моего кода.
Следующее является ошибкой:
OperationalError в /admin/polls/question/1/change/no такой таблицы: main.auth_user__old Метод запроса: URL запроса POST: http://127.0.0.1:8000/admin/polls/question/1/change/ Версия Django: 2.1.4 Тип исключения: OperationalError Значение исключения: такой таблицы нет: main.auth_user__old Расположение исключения: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py in execute, строка 296 Исполняемый файл Python: /Users/gfioravante/Проекты/test_app/ta_env/bin/python3 Версия Python: 3.7.1 Путь к Python:
['/Users/gfioravante/Projects/test_app/test_app', '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7 ','/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload ','/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages '] Время сервера: ср., 5 дек. 2018 16:45:00 +0000
и обратная связь:
Среда:
Метод запроса: URL запроса POST: http://127.0.0.1:8000/admin/polls/question/1/change/
Версия Django: 2.1.4 Версия Python: 3.7.1 Установленные приложения: ['polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions ',' django.contrib.messages ',' django.contrib.staticfiles '] Установленное промежуточное программное обеспечение: [' django.middleware.security.SecurityMiddleware ',' django.contrib.sessions.middleware.SessionMiddleware ',' dj.middleware.common.CommonMiddleware ',' django.middleware.csrf.CsrfViewMiddleware ',' django.contrib.auth.middleware.AuthenticationMiddleware ',' django.contrib.messages.middleware. "]
Проследить:
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. вернуть self.cursor.execute(sql, params)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" в файле execute 296. вернуть Database.Cursor.execute(self, query, Титулы)
Вышеуказанное исключение (такой таблицы нет: main.auth_user__old) было прямой причиной следующего исключения:
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py" во внутреннем 34. response = get_response (запрос)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" в _get_response 126. response = self.process_exception_by_middleware (например, запрос)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" в _get_response 124. response = wrapped_callback (request, * callback_args, ** callback_kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" в оболочке 604. вернуть self.admin_site.admin_view (view) (* args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" в _wrapped_view 142. response = view_func (request, * args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py" в _wrapped_view_func 44. response = view_func (request, * args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py" во внутреннем 223. возвращаемом виде (запрос, * args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" в change_view 1640. вернуть self.changeform_view (запрос, object_id, form_url, extra_context)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" в _wrapper 45. вернуть bound_method (* args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" в _wrapped_view 142. response = view_func (request, * args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" в changeform_view 1525. вернуть self._changeform_view (запрос, object_id, form_url, extra_context)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" в _changeform_view 1571. self.log_change (request, new_object, change_message)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py" в log_change 826. change_message = message,
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py" в log_action 35. change_message = change_message,
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" в manager_method 82. вернуть getattr (self.get_queryset(), name) (* args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" в файле create 413. obj.save(force_insert = True, используя = self.db )
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" в save 718. force_update = force_update, update_fields = update_fields)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" в save_base 748. updated = self._save_table (raw, cls, force_insert, force_update), используя, update_fields)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" в _save_table 831. result = self._do_insert (cls._base_manager, используя поля), update_pk, raw)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" в _do_insert 869. using = using, raw = raw)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py" в manager_method 82. вернуть getattr (self.get_queryset(), name) (* args, ** kwargs)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" в _insert 1136. вернуть query.get_compiler (using = using).execute_sql (return_id )
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py" в execute_sql 1289. cursor.execute(sql, params)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в execute 100. return super(). Execute (sql, params)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в execute 68. вернуть self._execute_with_wrappers (sql, params, many = False, исполнитель = self._execute)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute_with_wrappers 77. return executor (sql, params, many, context)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. вернуть self.cursor.execute(sql, params)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py" в выходе 89. поднять dj_exc_value.with_traceback (traceback) из exc_value
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. вернуть self.cursor.execute(sql, params)
Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" в файле execute 296. вернуть Database.Cursor.execute(self, query, Титулы)
Тип исключения: OperationalError в /admin/polls/question/1/change/Exception Value: нет такой таблицы: main.auth_user__old
Я только что столкнулся с этим сам, похоже, он связан с https://code.djangoproject.com/ticket/29182. Сейчас вы можете просто понизить версию sqlite до версии 2.6 (например, 2.5.1).
Проблема вызвана измененным поведением оператора ALTER TABLE RENAME
в SQLite 3.26.0 (см. Примечание о совместимости). Они также представили PRAGMA legacy_alter_table = ON
для обеспечения совместимости с предыдущими версиями. В следующем выпуске Django 2.1.5 в качестве исправления используется ранее упомянутое утверждение. Это ожидается 1 января 2019 года.
Избавиться от этой проблемы легко поддерживая следующие шаги:
pip install django==2.1.5
python manage.py makemigrations
python manage.py migrate
python manage.py makemigrations
а затем python manage.py makemigrations
python manage.py migrate
python manage.py runserver
СДЕЛАННЫЙ!
перейдите в эту папку django/db/backends/sqlite3
создайте резервную копию файла schema.py в другой папке
откройте исходный файл schema.py в текстовом редакторе
там вы можете увидеть фрагмент кода вроде
def __enter__(self):
# Some SQLite schema alterations need foreign key constraints to be
# disabled. Enforce it here for the duration of the schema edition.
if not self.connection.disable_constraint_checking():
raise NotSupportedError(
'SQLite schema editor cannot be used while foreign key '
'constraint checks are enabled. Make sure to disable them '
'before entering a transaction.atomic() context because '
'SQLite3 does not support disabling them in the middle of '
'a multi-statement transaction.'
)
self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
return super().__enter__()
прокомментируйте их и вставьте следующий фрагмент кода
def __enter__(self):
# Some SQLite schema alterations need foreign key constraints to be
# disabled. Enforce it here for the duration of the transaction.
self.connection.disable_constraint_checking()
self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
return super().__enter__()
Это сработало для меня. (резервная копия для schema.py на случай, если работа пойдет не так; D )
для получения дополнительной информации
благодарю вас
То же самое случилось со мной, очень расстраивает. Я использую anaconda для своих сред, я обнаружил, что не могу удалить sqlite без немедленной переустановки самой последней версии sqlite. Попытка старой версии django тоже не сработала. Единственное решение, которое сработало для меня, это использование базы данных PostgreSQL. Это, конечно, не идеально, но я планирую использовать базу данных PostgreSQL в будущем, так что это не было пустой тратой времени. Если вы оказались в том же месте, что и я, тогда это видео может быть полезно, если вы хотите узнать, как соединить базу данных PostgreSQL с вашим проектом django.
Вам нужно будет установить базу данных postgreSQL перед тем, как вносить изменения в settings.py, для установки нужно щелкнуть Далее во всех опциях. Однако запомните имя пользователя и пароль, которые вы используете во время установки.
Я решил проблему, обновив Django с 2.1.4 до 2.1.5, но мне пришлось пересобрать проект заново, потому что ошибка, похоже, как-то связана с объектами, которые я вставил в базу данных, используя старую версию Django.
Для тех, кто не хочет понижать версию какого-либо программного обеспечения, вы можете перейти в свой файл settings.py
и в разделе DATABASES
вы можете заменить .sqlit3
на .postgresql
, а прямо под ним изменить db.sqlit3
на db.sql
. Это переключит вашу базу данных по умолчанию на использование postgreSQL.
Для этого вам потребуется pip install psycopg2
.
Удалите файл db.sqlite3
(если он у вас есть/вам не нужно его терять) и все остальное, __init__.py
файла __init__.py
в папке переноса приложения. Сделав все это, вы можете запустить python manage.py makemigrations
и python manage.py migrate
и тогда это должно работать :)
Надеюсь, я смог кому-то помочь!
Только сделал это, и я решил эту проблему
'pip install Django --upgrade'
Тогда
python manage.py migrate
python manage.py makemigrations app
python manage.py migrate
И конец
Открыть => /YourAppFolder/migrations/ Вы бы увидели, что мигрирующие файлы, такие как 0001_initial.py, удалили все эти файлы. И запустите следующую команду
1- python manage.py makemigrations
2- python manage.py migrate
Надеюсь, это должно решить вашу проблему
если вы не хотите менять свою версию Django, то база данных должна быть изменением. Используйте PostgreSQL мои рекомендации. Проблема будет решена после миграции и миграции.
шаги:
Удалите текущий Django из вашего ENV. Просто удалите папку "anaconda3/envs/yourenv/lib/python3.7/site-packages/Django всех версий". * Примечание: другие пользователи должны выяснить, как удалить пакет из ENV, только для пользователей Anaconda.
Перейдите на Github.com/django/django.
Загрузите репо в виде zip файла.
Извлечь zip.
Переключитесь на свой ENV.
Введите извлеченную папку.
Запустите "python setup.py install" и установите Django.
Удалите свой предыдущий файл db.sqlite3. Теперь примените миграцию снова, чтобы создать новый файл db.sqlite3.
* Примечание: я не знаю, как исправить предыдущий файл базы данных и предотвратить потерю данных. Поэтому, пожалуйста, скажи мне, если знаешь.
Congrats! Теперь работает нормально.
Обновление до последней версии Django в январе с официального релиза Django.
Я просто попытался решить проблему, используя последнюю версию Django, но проблема все еще остается. Пока они не устранят эту проблему с помощью Django и Sqlite3, используйте более старые версии Django. Вы можете использовать версию 1.10.5 (используя команду pip install --upgrade django == 1.10.5)
У меня была та же проблема, за исключением того, что у меня было 2 базы данных sqlite и пользовательский маршрутизатор базы данных. Мне удалось заставить его работать, понизив Django до 1.11.20, и мне не нужно было пересоздавать базы данных.
Что вы можете сделать, это просто перейти в базу данных с помощью браузера sqlite3 и изменить таблицу ссылок, используя соответствующий атрибут с auth_user__old на auth_user. Это сработало для меня, и мой проект работает нормально.
Для тех, кто не может разрешить эту ошибку с помощью приведенных выше ответов, если вы создали приложение с именем "main", эта ошибка может возникнуть из-за проблемы с тем же именем приложения. Поэтому попробуйте изменить название вашего приложения "основное" на другое.
вам нужно обновить Django, эта проблема была исправлена в этом PR https://github.com/django/django/pull/10733
Я решил проблему, изменив некоторые из моих моделей. У меня был один названный проект и один названные проекты. Таблицы базы данных запутались и бросили мне эту ошибку.
Для вышеуказанной проблемы и решения:
1) Перейдите в терминал и введите "pip install django == 2.1.7" или последнюю версию django
.2) После установки в терминале введите "python manage.py makemigrations", а затем "python manage.py migrate"
3) Запустите сервер в терминале с кодом python manage.py runserver'
.4) Войдите на сервер администратора с паролем и добавьте продукт, он успешно добавит продукт.
Да, у меня та же ошибка на Django 2.1.4
OperationalError (такой таблицы нет: main.auth_user__old)
Я удалил Django 2.1.4, установил Django 1.11.16, проблема решена
Установить Django 1.11.16 для меня не полезно. Он покажет "ModuleNotFoundError" и "FileNotFoundError". Затем я открываю файл "db.sqlite3", копирую таблицу "auth_user" и "django_content_type" со структурой и данными, меняю имя таблицы на "auth_user__old" и "django_content_type__old". Это сработало! Я надеюсь, что это полезно для запутанных.
Пожалуйста, понизьте версию django до версии 1.5 или, если вы не хотите понижать версию, вы можете изменить schema.py локально, применить исправление и запустить команду makemigrations + migrate, но это не рекомендуется.
Есть только 4 вещи, которые я сделал в командной строке, и это исправило мою.
py manage.py makemigrations
py manage.py migrate
py manage.py runserver
(запустить сервер)Обновите версию Django с версии 2.1 и выше. Я обновился до 2.1.8. Работал на меня!
Ура.....