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 у виконанні, рядок 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

і зворотний зв'язок:

Навколишнє середовище:

Метод запиту: POST URL-адреса запиту: 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 ', djangoware.djangover.middleware. ']

Простежити:

Файл "/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, параметри)

Вищезазначений виняток (немає такої таблиці: 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, запит)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py" у _get_response 124. response = wrapped_callback (запит, * 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 (перегляд) (* аргументи, ** кварги)

Файл "/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 (запит, 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) (* аргументи, ** кварги)

Файл "/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" при збереженні 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, необроблений)

Файл "/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) (* аргументи, ** кварги)

Файл "/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py" у _insert 1136. return query.get_compiler (з використанням = 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" у виконанні 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, параметри, багато, контекст)

Файл "/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 (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, параметри)

Тип винятку: OperationalError у / admin / polls / question / 1 / change / Значення винятку: такої таблиці немає: main.auth_user__old


Якщо у вас немає даних, просто видаліть їх і перенесіть знову. Якщо це неможливо, зробіть, python manage.py showmigrationsщоб побачити, які міграції не зроблено
запевняючи

Відповіді:


52

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


7
Зараз виправлено проблему, і вона буде включена до наступних версій 2.1.5 (очікується 1 січня 2019 р.) Та 2.0.10 (дата випуску TBD).
Alasdair

8
Не так просто знизити версію системи macOS sqlite3 або я чогось тут пропускаю? Моє обхідне рішення - встановити github / master django (де це виправлено).
Альпер,

1
@Alper Я видалив поточний django, а потім встановив django з GitHub. помилка все ще зберігається, і я не зміг знизити sqlite3 на моєму macOS (наприклад, за допомогою brew install sqlite3@3.25.1) Будь-яка ідея?
Хаціл

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

9
@Alvaro Помилка виправлена ​​в Django 2.1.5
Сельчук

53

Позбудьтеся цієї проблеми, легко виконуючи такі дії:

  1. зберегти django версії 2.1.5 (проблема, розглянута в цій версії) pip install django==2.1.5
  2. Видаліть SQLite db
  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 у вашій кореневій папці" - це ключ ~ запустити 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/commits/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

@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 createuperuser Введіть туди деталі суперкористувача.
  4. Запустіть сервер ще раз.

Ось так.


5

для мене це було з моєї версії django (це було 2.1) встановити вищу версію (я використовував 2.1.5 з деяких причин) ** видалити db.sqlite3 і все в папці міграції, крім команди init .py run:

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. Це переключає ваш db за замовчуванням на використання postgreSQL.

Роблячи це, вам потрібно буде pip install psycopg2.

Видаліть db.sqlite3файл (якщо він є у вас / вам байдуже втратити те, що в ньому), а також усе інше, що не є __init__.pyфайлом, у папці міграції вашого додатка. Після того, як ви все це зробите, ви можете запустити python manage.py makemigrationsі python, manage.py migrateі тоді він повинен працювати :)

Сподіваюся, я зміг комусь допомогти!


2
Потрібно також встановити PostgreSQL, щоб це працювало для тих, хто не може зрозуміти, чому у вас виникають помилки підключення після всього цього. :)
Гілберт,

хіба psycopg2 не є PostgreSQL? Тому що це пояснювало б, чому це не запустило б сервер для мене ха-ха
Ziiik

2
AFAIK psycopg2 - це адаптер, який змушує Python спілкуватися з PostgreSQL, але PostgreSQL потрібно встановлювати окремо. Примітка: Я новачок у Джанго, тому сприйміть усе, що я скажу, з достатньою кількістю солі.
Гілберт

2

Open => / 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-пакети / Django всі версії .. * Примітка. Тільки для користувачів Anaconda інші користувачі повинні з'ясувати, як видалити пакет із вашого ENV.

  2. Зайдіть на Github.com/django/django.

  3. Завантажте репо у форматі zip.

  4. Витягніть блискавку.

  5. Перейдіть на свій ENV.

  6. Введіть витягнуту папку.

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

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

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

  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 мігрує, manage.py створюєuperuser, а потім 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.