Django - такой таблицы нет: main.auth_user__old


85

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

Ниже приводится ошибка:

OperationalError в / admin / polls / question / 1 / change / нет такой таблицы: 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 в execute, строка 296 Исполняемый файл Python: / Users / gfioravante / Projects / 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 ',' django .middleware.common.CommonMiddleware ',' django.middleware.csrf.CsrfViewMiddleware ',' django.contrib.auth.middleware.AuthenticationMiddleware ',' django.contrib.messages.middleware.MessageMiddleware ',' django. ']

Проследить:

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. return self.cursor.execute (sql, params)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" при выполнении 296. return Database.Cursor.execute (self, query, params)

Вышеупомянутое исключение (такой таблицы нет: 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 (e, request)

Файл "/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. return self.admin_site.admin_view (view) (* args, ** кваргс)

Файл "/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. return self.changeform_view (request, object_id, form_url, extra_context)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py" в _wrapper 45. return 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. return self._changeform_view (request, 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. return getattr (self.get_queryset (), name) (* аргументы, ** 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, using = self.db )

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py" в сохранении 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, using, fields , 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. return getattr (self.get_queryset (), name) (* аргументы, ** kwargs)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" в _insert 1136. return 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" при выполнении 100. return super (). Execute (sql, params)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" при выполнении 68. return 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. исполнитель возврата (sql, params, many, context)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. return 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 (трассировка) из exc_value

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py" в _execute 85. return self.cursor.execute (sql, params)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" при выполнении 296. return Database.Cursor.execute (self, query, params)

Тип исключения: OperationalError в / admin / polls / question / 1 / change / Exception Value: нет такой таблицы: main.auth_user__old


Если у вас нет данных, просто удалите их и перенесите снова. Если это невозможно, python manage.py showmigrationsпосмотрите, какие миграции не были выполнены
05

Ответы:


52

Я сам столкнулся с этим, похоже, это связано с https://code.djangoproject.com/ticket/29182 . На данный момент вы можете просто понизить свою версию sqlite до версии до 2.6 (например, 2.5.1).


7
Исправление проблемы уже внесено, и оно будет включено в следующие выпуски версии 2.1.5 (ожидается 1 января 2019 г.) и 2.0.10 (дата выпуска подлежит уточнению).
Alasdair

8
Не так просто понизить версию системы macOS sqlite3 или мне что-то здесь не хватает? Мой обходной путь - установить github / master django (где это исправлено).
Alper

1
@Alper Я удалил текущий django, а затем установил django с GitHub. ошибка все еще сохраняется, и мне не удалось понизить версию sqlite3 на моей macOS (например, используя brew install sqlite3@3.25.1) Есть идеи?
Hatzil

5
После обновления не забудьте удалить базу данных и перестроить ее с помощью команды миграции.
Mitsjol

9
@Alvaro Ошибка исправлена ​​в Django 2.1.5
Сельчук,

53

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

  1. оставьте django версии 2.1.5 (проблема решена в этой версии) pip install django==2.1.5
  2. Удалить базу данных SQLite
  3. Перенести еще раз, python manage.py makemigrationsа затемpython manage.py migrate
  4. Запустить сервер python manage.py runserver

СДЕЛАННЫЙ!


1
Это будет работать отлично, но предположим, что вы не хотите удалять файл sqlite db?
Филип

1
это работает даже без удаления sqlite db (но все еще переносится). я работал над старыми проектами с 2.0.4
izzulmakin

Спасибо, это хорошо работает. Я использую версию 2.0.7 и не могу сохранить данные в админке.
xreyc_developer22

Большое вам спасибо, это работает хорошо
новый программист

15

Просто сделал это, и проблема была решена:

pip install Django --upgrade

Потом:

python manage.py migrate

python manage.py makemigrations app

python manage.py migrate

11

Вот что я сделал для решения этой проблемы:

  1. Заходим в виртуальную среду и устанавливаем django@2.1.7

    pip install django==2.1.7
    
  2. Удалите db.sqlite3файл в корневой папке.

  3. Создайте новый db.sqlite3в своей корневой папке.
  4. Повторно запустить миграции:

    python3 manage.py makemigrations
    
    python3 manage.py migrate
    

Теперь все должно работать нормально.


«удалить файл db.sqlite3 в корневой папке» - это ключ. ~ run python3 manage.py makemigrations создаст новый файл sqlite3 .
Джером

По какой-то причине удаление sqlite не просто сработало, я также попытался удалить миграции pycache + (я только изучаю Django), тогда это сработало для меня.
Аншуман Кумар

10

Проблема вызвана измененным поведением ALTER TABLE RENAMEоператора в SQLite 3.26.0 (см. Примечание о совместимости ). Они также ввели PRAGMA legacy_alter_table = ONзаявление, чтобы сохранить совместимость с предыдущими версиями. В следующем выпуске Django 2.1.5 в качестве исправления используется ранее упомянутая инструкция. Ожидается 1 января 2019 года.


9

заходим в эту папку 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)

для получения дополнительной информации

https://github.com/django/django/pull/10733/commit/c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f#diff-0c8f495bfee773ab7b5409533bd6d7ef


Я использовал это исправление для django 1.11, за исключением того, что мне нужно было только добавить строку «c.execute ('PRAGMA legacy_alter_table = ON')» после «c.execute ('PRAGMA foreign_keys = 0')», и это исправило его.
n00b

2
Я нахожусь в середине учебника, для которого требуется django 2.0.7. Это решение работает :)
Bisonbleu 05

@Bisonbleu Мне кажется, я нахожусь в середине того же урока. Но решение у меня не сработало. Не могли бы вы рассказать, что вы сделали?
code_life

2
@unathletic_coder, как это было предложено в ответе Намала Джаясундара, я перешел на /project_name/lib/python3.7/site-packages/django/db/backends/sqlite3/schema.py в строке 21, которая начинается с: def __enter __ (self): и заменил существующий код предложенными 3 строками кода. Я делаю youtube.com/watch?v=F5mRW0jo-U4
Bisonbleu

6

Я решил проблему, обновив Django с 2.1.4 до 2.1.5, но мне пришлось пересобрать проект заново, потому что ошибка, похоже, каким-то образом связана с объектами, которые я вставил в базу данных, используя старую версию Django.


1
в этом случае команды migrate и makemigrations достаточно для нового django.
Правин Р.Г. Мишра

5
  1. Сначала остановите сервер и удалите db.sqlite3.
  2. Затем вам нужно запустить: python manage.py makemigrations python manage.py migrate
  3. После выполнения этой команды вам необходимо создать суперпользователя. Чтобы создать суперпользователя, запустите: python manage.py createduperuser Введите здесь данные суперпользователя.
  4. Снова запустите свой сервер.

Вот так.


5

для меня это было из моей версии django (это было 2.1) установить более высокую версию (я использовал 2.1.5 по некоторым причинам) ** удалите db.sqlite3 и все в папке миграции, кроме команды запуска init .py:

pip install django==2.1.5 --upgrade
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

4

То же самое произошло и со мной, и это очень расстраивает. Я использую anaconda для своих сред, я обнаружил, что не могу удалить sqlite без немедленной переустановки самой последней версии sqlite. Пробовать старую версию django тоже не получилось. Единственное решение, которое сработало для меня, - это использование базы данных PostgreSQL. Это, конечно, не идеально, но я планирую использовать базу данных PostgreSQL в будущем, так что это не было пустой тратой времени. Если вы оказались в том же месте, что и я, то это видео может быть полезно, если вы хотите узнать, как подключить базу данных PostgreSQL к вашему проекту django.

Вам нужно будет установить базу данных postgreSQL, прежде чем вносить изменения в settings.py, установка требует более или менее нажатия кнопки «Далее» для всех параметров. Однако запомните имя пользователя и пароль, которые вы используете во время установки.


3

Для вышеуказанной проблемы и решения:

1) Зайдите в терминал и введите pip install django==2.1.7или последнюю версию django

2) После установки введите в терминале python manage.py makemigrations, а затемpython manage.py migrate

3) В терминале запустите сервер с кодом python manage.py runserver

4) Войдите на сервер администратора с паролем и добавьте продукт. Он успешно добавит продукт.


Добро пожаловать в Stack Overflow! Пожалуйста, сообщайте о любой аффилированности и не используйте сайт как способ продвижения вашего сайта посредством публикации. См. Как мне написать хороший ответ? .

2

Для тех , кто не хочет , чтобы понизить любое программное обеспечение, вы можете направиться в свой settings.pyфайл и в DATABASESСловаре, вы можете заменить .sqlit3с .postgresql, и прямо под ним изменить db.sqlit3к db.sql. Это переключает вашу базу данных по умолчанию на использование postgreSQL.

Для этого вам понадобится pip install psycopg2.

Удалите свой db.sqlite3файл (если он у вас есть / не заботитесь о том, чтобы потерять то, что в нем) и все остальное, кроме __init__.pyфайла, в папке миграции вашего приложения. Как только вы все это сделаете, можете запускать python manage.py makemigrationsи питон, manage.py migrateи тогда он должен работать :)

Надеюсь, я смог кому-то помочь!


2
PostgreSQL также должен быть установлен, чтобы это работало для всех, кто не может понять, почему у вас возникают ошибки подключения после всего этого. :)
Gilbert

psycopg2 - это не PostgreSQL? Потому что это объясняет, почему он не запускал для меня сервер, ха-ха
Зииик

2
AFAIK psycopg2 - это адаптер, позволяющий Python разговаривать с PostgreSQL, но PostgreSQL необходимо устанавливать отдельно. Примечание: я новичок в Django, поэтому относитесь ко всему, что я говорю, с недоверием.
Gilbert

2

Откройте => / YourAppFolder / migrations / Вы увидите, что файлы миграции, как « 0001_initial.py », удаляют все эти файлы. И запустить follwing команды 1- python manage.py makemigrations 2- python manage.py migrate Хоуп, он должен решить вашу проблему


1
в конце концов проблема не была связана с этим, но спасибо, что нашли время!
northernSage

2

Даже после обновления до последней версии Django 2.2.12 и запуска любого migrateили официального сценария восстановления базы данных я получил ту же ошибку __old_: django.db.utils.IntegrityError: The row in table 'djangocms_blog_post_translation' with primary key '2' has an invalid foreign key: djangocms_blog_post_translation.master_id contains a value '2' that does not have a corresponding value in djangocms_blog_post__old.id.

Вот мой хак:

  1. выгрузить содержимое базы данных в sql: sqlite3 my_db.db .dump > my_db.sql
  2. запустить регулярное выражение для вывода sql, заменив __old" ("id")на" ("id") DEFERRABLE INITIALLY DEFERRED
  3. удалить старый файл базы данных
  4. загрузить измененный sql в новую базу данных: sqlite3 my_db.db < my_db.sql
  5. ??? и прибыль

1

Шаги:

  1. Удалите текущий Django из вашего ENV. Просто удалите папку «anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django все версии .. * Примечание. Только для пользователей Anaconda, другие пользователи должны выяснить, как удалить пакет из вашего ENV.

  2. Перейдите на Github.com/django/django.

  3. Загрузите репо в виде zip-файла.

  4. Распаковать zip.

  5. Переключитесь на свой ENV.

  6. Войдите в извлеченную папку.

  7. Запустите "python setup.py install" и установите Django.

  8. Удалите предыдущий файл db.sqlite3. Теперь снова примените миграции, чтобы создать новый файл db.sqlite3.

* Примечание: я не знаю, как исправить предыдущий файл базы данных и предотвратить потерю данных. Так что скажите, пожалуйста, если знаете.

  1. Запускаем сервер.

Поздравляю! Теперь все работает нормально.

Обновление до последней версии django в январе из официального выпуска Django.


1

У меня была такая же проблема, за исключением того, что у меня было 2 базы данных sqlite и настраиваемый маршрутизатор базы данных. Мне удалось заставить его работать, понизив Django до 1.11.20 и не создавая необходимости заново создавать базы данных.


1

Для тех, кто не может решить эту ошибку с помощью приведенных выше ответов, если вы создали свое приложение с именем «main», эта ошибка может возникнуть из-за проблемы с тем же именем приложения. Так что попробуйте изменить имя вашего приложения «main» на другое.



1

Я решил проблему, поменяв некоторые свои модели. У меня был один именованный проект и один именованный проект. Таблицы базы данных запутались и бросили мне эту ошибку.


1

Я решил эту проблему, используя ниже:

1) Удалите db.sqlit3

2) каталог приложения удалить все в pycache

3) manage.py makemigrations, manage.py migrate, manage.py создает суперпользователя, а затем manage.py runserver.


1

У меня была такая же проблема, и я исправил ее, выполнив следующие действия:

1) Скачайте последнюю djangoверсию

2) скачайте последнюю SQL Liteверсию

3) удалить db.sqlite3файл из вашего проекта

4) Внесите небольшие изменения в models.py(например, измените размер поля)

5) сгенерируйте новый db.sqllite3файл, запустив makemigrations&migrate commands

6) импортируйте вновь созданный db.sqllite3файл вSQL Lite


1

Я установил / понизил django до версии 2.2, это удалило django 3.x

pip install django==2.2

а затем я удалил файл db.sqlite, а затем

Я старался

python manage.py makemigrations,
python manage.py migrate 
python manage.py creatingsuperuser. 


0

Я сделал всего 4 вещи в командной строке, и она исправила мою.

  1. ctrl + c (остановить сервер)
  2. py manage.py makemigrations
  3. py manage.py migrate
  4. py manage.py runserver (запустить сервер)

1
Проблема уже исправлена с 2.1.5 пункта выпуска (номер билета # 29182 в «Исправление ошибок сессии примечания к выпуску). Docs.djangoproject.com/en/2.1/releases/2.1.5/#bugfixes
northernSage

0

django-2.2.7
Это сработало для меня -

1) Удалите db.sqlite3 .
2) В каждом приложении в папке миграции удалите все, кроме __init__.py .
3) В каждом приложении удалите папку __pycache__ .

Я не уверен, нужно ли вам делать это для всех приложений или только для соответствующего приложения, но у меня это сработало.


migrationsДля решения подобных проблем стоит попрактиковаться в удалении файлов. @rajvijay
Whale 52Hz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.