Django - No such table: main.auth_user__old
我正在关注官方Django文档中的第一个应用程序教程,并在尝试保存通过管理页面进行的一些更改时遇到此错误。 我做了一些研究,但我能找到的可能的解决方案,比如迁移数据库,根本行不通。 如果您想查看我的代码的某些特定部分,请告诉我。
以下是错误:
OperationalError at /admin/polls/question/1/change/ no such table:
main.auth_user__old Request Method: POST Request
URL: http://127.0.0.1:8000/admin/polls/question/1/change/ Django
Version: 2.1.4 Exception Type: OperationalError Exception Value: no
such table: main.auth_user__old Exception
Location: /Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py
in execute, line 296 Python
Executable: /Users/gfioravante/Projects/test_app/ta_env/bin/python3
Python Version: 3.7.1 Python Path:
['/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']
Server time: Wed, 5 Dec 2018 16:45:00 +0000
和追溯:
Environment:
Request Method: POST Request URL:
http://127.0.0.1:8000/admin/polls/question/1/change/Django Version: 2.1.4 Python Version: 3.7.1 Installed Applications:
['polls.apps.PollsConfig', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.contenttypes',
'django.contrib.sessions', 'django.contrib.messages',
'django.contrib.staticfiles'] Installed Middleware:
['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.middleware.clickjacking.XFrameOptionsMiddleware']Traceback:
File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in _execute
85. return self.cursor.execute(sql, params)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py"
in execute
296. return Database.Cursor.execute(self, query, params)The above exception (no such table: main.auth_user__old) was the
direct cause of the following exception:File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/exception.py"
in inner
34. response = get_response(request)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py"
in _get_response
126. response = self.process_exception_by_middleware(e, request)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/core/handlers/base.py"
in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py"
in wrapper
604. return self.admin_site.admin_view(view)(*args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py"
in _wrapped_view
142. response = view_func(request, *args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/views/decorators/cache.py"
in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/sites.py" in inner
223. return view(request, *args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py"
in change_view
1640. return self.changeform_view(request, object_id, form_url, extra_context)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py"
in _wrapper
45. return bound_method(*args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py"
in _wrapped_view
142. response = view_func(request, *args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py"
in changeform_view
1525. return self._changeform_view(request, object_id, form_url, extra_context)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py"
in _changeform_view
1571. self.log_change(request, new_object, change_message)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py"
in log_change
826. change_message=message,File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/models.py"
in log_action
35. change_message=change_message,File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py"
in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py"
in create
413. obj.save(force_insert=True, using=self.db)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py"
in save
718. force_update=force_update, update_fields=update_fields)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py"
in save_base
748. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py"
in _save_table
831. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py"
in _do_insert
869. using=using, raw=raw)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/manager.py"
in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/query.py"
in _insert
1136. return query.get_compiler(using=using).execute_sql(return_id)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/sql/compiler.py"
in execute_sql
1289. cursor.execute(sql, params)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in execute
100. return super().execute(sql, params)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in execute
68. return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in _execute_with_wrappers
77. return executor(sql, params, many, context)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in _execute
85. return self.cursor.execute(sql, params)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py"
in exit
89. raise dj_exc_value.with_traceback(traceback) from exc_valueFile
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py"
in _execute
85. return self.cursor.execute(sql, params)File
"/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py"
in execute
296. return Database.Cursor.execute(self, query, params)Exception Type: OperationalError at /admin/polls/question/1/change/
Exception Value: no such table: main.auth_user__old
我自己也遇到过这个问题,它看起来与https://code.djangoproject.com/ticket/29182有关。现在,您可以将您的sqlite版本降级到2.6之前的版本(例如2.5.1)
问题是由SQLite 3.26.0中
转到此文件夹django / db / backends / sqlite3
将'schema.py'文件备份到另一个文件夹
在文本编辑器中打开原始schema.py
在那里你可以看到像这样的代码片段
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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__() |
评论它们并粘贴以下代码段
1 2 3 4 5 6 | 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从2.1.4升级到2.1.5解决了这个问题,但我不得不重新重建项目,因为这个bug似乎与我使用旧版本的Django插入到数据库中的obgject有关。
轻松解决此问题,并保持以下步骤:
DONE!
同样的事发生在我身上,非常令人沮丧。我在我的环境中使用anaconda,我发现如果不立即重新安装最新版本的sqlite,我无法删除sqlite。尝试旧版本的django似乎也没有用。对我有用的唯一解决方案是使用PostgreSQL数据库。它当然不太理想,但我计划将来使用PostgreSQL数据库,所以这不是完全浪费时间。如果您发现自己和我在同一个地方,那么如果您想知道如何将PostgreSQL数据库与您的django项目连接起来,这个视频可能会有所帮助。
在实际进行settings.py中的更改之前,您需要安装postgreSQL数据库,安装更多的是在所有选项上单击Next。但是,请记住您在安装期间使用的用户名和密码。
对于其他不想降级任何软件的人,可以进入
这样做,你需要
删除
希望我能够帮助别人!
如果你不想改变你的Django版本,那么数据库必须是改变。
使用PostgreSQL我的建议。
makemigrations和migrate之后问题将解决。
脚步:
从您的ENV卸载当前的Django。只需删除文件夹"anaconda3 / envs / yourenv / lib / python3.7 / site-packages / Django所有版本..
*注意:仅限Anaconda用户,其他用户应了解如何从ENV中卸载软件包。
转到Github.com/django/django。
将repo下载为zip文件。
提取拉链。
切换到你的ENV。
输入解压缩的文件夹。
运行"python setup.py install"并安装Django。
删除以前的db.sqlite3文件。现在再次应用迁移以创建新的db.sqlite3文件。
*注意:我不知道如何修复以前的dbfile并防止数据丢失。如果你知道,请告诉我。
恭喜!它现在工作正常。
从官方的Django版本更新到1月份的最新django。
我只是尝试使用最新版本的Django解决问题,但问题仍然存在。
直到他们不用Django和Sqlite3调试这个问题的时候使用旧版本的Django您可以考虑使用版本1.10.5(使用命令pip install --upgrade django == 1.10.5)
只是这样做了,我解决了这个问题
1 | `pip install Django --upgrade` |
然后
结束了
我有同样的问题,除了我有2个sqlite数据库和自定义数据库路由器。我设法通过将Django降级到1.11.20而无需重新创建数据库。
您可以做的只是使用sqlite3浏览器转到数据库,并使用auth_user__old和auth_user中的相应属性更改引用表。它对我有用,我的项目工作正常。
对于那些无法通过上述答案解决此错误的用户,如果您的应用程序名称为"main",则可能会出现此错误,导致相同的应用名称问题。因此,请尝试将您的应用名称"main"更改为另一个。
你需要升级Django,这个问题已在此PR中修复https://github.com/django/django/pull/10733
我通过改变一些模型解决了这个问题。我有一个命名项目和一个命名项目。数据库表混淆了,并把这个错误扔给了我。
请将django版本降级到1.5,或者如果您不想降级版本,则可以在本地更改schema.py,应用补丁并运行makemigrations + migrate命令,但不推荐使用。
Yes I've got same error on Django 2.1.4
OperationalError
(No such table: main.auth_user__old)我删除了Django 2.1.4安装Django 1.11.16问题解决了
BLOCKQUOTE>
安装Django 1.11.16对我没用。它将显示"ModuleNotFoundError"和"FileNotFoundError"。然后我打开文件"db.sqlite3",用表格和数据复制表"auth_user"和"django_content_type",将表名更改为"auth_user__old"和"django_content_type__old"。有效!我希望它对困惑有用。
Open => / YourAppFolder / migrations /你会看到像'0001_initial.py'这样的迁移文件删除所有这些文件。然后运行以下命令
1-python manage.py makemigrations
2-python manage.py migrate
希望,它必须解决你的问题
我在命令行上只做了4件事就修好了。
ctrl + c(停止服务器) py manage.py makemigrations py manage.py migrate py manage.py runserver (启动服务器)
将Django的版本从2.1升级到更高版本。我升级到2.1.8。
为我工作!干杯.....