关于python:Django – 没有这样的表:main.auth_user__old

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_value

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)

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中ALTER TABLE RENAME语句的修改行为引起的(请参阅兼容性说明)。他们还引入了PRAGMA legacy_alter_table = ON语句,以保持与先前版本的兼容性。即将发布的Django版本2.1.5使用前面提到的语句作为修补程序。预计2019年1月1日。


转到此文件夹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有关。


轻松解决此问题,并保持以下步骤:

  • 保持django版本2.1.5(此版本中解决的问题)
    pip install django==2.1.5
  • 删除SQLite数据库
  • 再次迁移python manage.py makemigrations然后python manage.py migrate
  • 启动服务器python manage.py runserver
  • DONE!


    同样的事发生在我身上,非常令人沮丧。我在我的环境中使用anaconda,我发现如果不立即重新安装最新版本的sqlite,我无法删除sqlite。尝试旧版本的django似乎也没有用。对我有用的唯一解决方案是使用PostgreSQL数据库。它当然不太理想,但我计划将来使用PostgreSQL数据库,所以这不是完全浪费时间。如果您发现自己和我在同一个地方,那么如果您想知道如何将PostgreSQL数据库与您的django项目连接起来,这个视频可能会有所帮助。

    在实际进行settings.py中的更改之前,您需要安装postgreSQL数据库,安装更多的是在所有选项上单击Next。但是,请记住您在安装期间使用的用户名和密码。


    对于其他不想降级任何软件的人,可以进入settings.py文件,在DATABASES dict中,可以用.postgresql替换.sqlit3,然后在.postgresql下面将db.sqlit3更改为db.sql。这会将您的默认数据库切换为使用postgreSQL。

    这样做,你需要pip install psycopg2

    删除db.sqlite3文件(如果您有/不关心丢失其中的内容)以及应用程序迁移文件夹中不是__init__.py文件的所有内容。一旦你完成了所有这些,你可以运行python manage.py makemigrations和python manage.py migrate然后它应该工作:)

    希望我能够帮助别人!


    如果你不想改变你的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`

    然后

    python manage.py migrate

    python manage.py makemigrations app

    python manage.py migrate

    结束了


    我有同样的问题,除了我有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问题解决了

    安装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。
    为我工作!

    干杯.....