Django - 没有这样的表:main.auth_user__old

2025-03-05 09:17:00
admin
原创
97
摘要:问题描述:我按照官方 Django 文档中的第一个应用教程操作,在尝试保存通过管理页面所做的某些更改时出现此错误。我对此进行了一些研究,但我能找到的可能解决方案(例如迁移数据库)根本不起作用。如果您想查看我代码的某个特定部分,请告诉我。以下是错误:/admin/polls/question/1/change/...

问题描述:

我按照官方 Django 文档中的第一个应用教程操作,在尝试保存通过管理页面所做的某些更改时出现此错误。我对此进行了一些研究,但我能找到的可能解决方案(例如迁移数据库)根本不起作用。如果您想查看我代码的某个特定部分,请告诉我。

以下是错误:

/admin/polls/question/1/change/ 上的 OperationalError 没有这样的表:main.auth_user__old 请求方法:POST 请求 URL: 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'] 服务器时间:2018 年 12 月 5 日星期三 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','django.middleware.clickjacking.XFrameOptionsMiddleware']

追溯:

文件“/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”在执行 296 中返回 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(request)

文件“/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)

包装器 604 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”。返回 self.admin_site.admin_view(view)(args, *kwargs)

_wrapped_view 142 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py”。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。返回视图(request、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(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 中。返回 bound_method(args, *kwargs)

_wrapped_view 142 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/utils/decorators.py”。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(request、object_id、form_url、extra_context)

_changeform_view 1571 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/contrib/admin/options.py”。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”中创建 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, using, update_fields)

_save_table 831 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”。result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)

_do_insert 869 中的文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/models/base.py”。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”中执行 100。返回 super().execute(sql, params)

文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/backends/utils.py”在执行 68 中返回 self._execute_with_wrappers(sql, params, many=False, executor=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. 返回 self.cursor.execute(sql, params)

文件“/Users/gfioravante/Projects/test_app/ta_env/lib/python3.7/site-packages/django/db/utils.py”在出口
89。从 exc_value 引发 dj_exc_value.with_traceback(traceback)

文件“/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”在执行 296 中返回 Database.Cursor.execute(self, query, params)

异常类型:/admin/polls/question/1/change/ 处的 OperationalError 异常值:没有这样的表:main.auth_user__old


解决方案 1:

按照以下步骤轻松解决此问题:

  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

完毕!

解决方案 2:

我刚刚自己遇到了这个问题,它看起来与https://code.djangoproject.com/ticket/29182有关。目前,您可以将 sqlite 版本降级到 2.6 之前的版本(例如 2.5.1)

解决方案 3:

只需这样做就可以解决问题:

pip install Django --upgrade

然后:

python manage.py migrate

python manage.py makemigrations app

python manage.py migrate

解决方案 4:

以下是我为解决这个问题所做的事情:

  1. 进入虚拟环境并安装django@2.1.7

pip install django==2.1.7
  1. 删除db.sqlite3根文件夹中的文件。

  2. db.sqlite3在根文件夹中创建新文件夹。

  3. 重新运行迁移:

python3 manage.py makemigrations

python3 manage.py migrate

现在它应该可以正常工作了。

解决方案 5:

ALTER TABLE RENAME该问题是由SQLite 3.26.0 中修改了该语句的行为引起的(请参阅兼容性说明)。他们还引入了该PRAGMA legacy_alter_table = ON语句以保持与以前版本的兼容性。即将发布的Django 版本 2.1.5使用前面提到的语句作为修补程序。预计在 2019 年 1 月 1 日发布。

解决方案 6:

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

解决方案 7:

  1. 首先,停止服务器并删除db.sqlite3。

  2. 然后,您需要运行:

python manage.py makemigrations

python manage.py migrate

  1. 运行此命令后,您需要创建超级用户。要创建超级用户,请运行:

python manage.py createsuperuser

在此处输入超级用户详细信息。

  1. 再次运行您的服务器。

就这样。

解决方案 8:

即使升级到最新的 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. ??? & 利润

解决方案 9:

我通过将 Django 从 2.1.4 升级到 2.1.5 解决了这个问题,方法是运行

pip install --upgrade django==2.1.5

但是我不得不重新构建项目,因为这个错误似乎与我使用旧版本的 Django 插入数据库的对象有关。


更新:

无需删除整个项目,只需删除数据库即可。然后运行

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

解决方案 10:

就我而言,这是因为我的 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

解决方案 11:

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

在实际更改 settings.py 之前,您需要安装 postgreSQL 数据库,安装过程基本上就是单击所有选项上的“下一步”。但是,请记住安装过程中使用的用户名和密码。

解决方案 12:

保留 django 版本 2.1.5

This issue is adressed only in this version of Django
  • pip 安装 django==2.1.5

  • 删除 SQLite 数据库

  • 运行迁移

  • 启动服务器 python manage.py runserver

这解决了上述问题

解决方案 13:

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

在这样做时,您需要pip install psycopg2

删除您的db.sqlite3文件(如果您有文件/不介意丢失其中的内容)以及__init__.py应用程序迁移文件夹中除该文件之外的所有其他内容。完成所有这些操作后,您可以运行python manage.py makemigrationsPython manage.py migrate,然后它应该可以正常工作 :)

希望我能够帮助到别人!

解决方案 14:

打开 => /YourAppFolder/migrations/您将看到迁移文件,如“ 0001_initial.py ” 删除所有这些文件。然后运行以下命令 1- python manage.py makemigrations
2-python manage.py migrate
希望它能解决您的问题

解决方案 15:

对于上述问题,解决办法是:

1)进入终端并输入pip install django==2.1.7或最新版本的django

2)安装完成后,在终端输入python manage.py makemigrations,然后python manage.py migrate

3)在终端中,使用代码启动服务器python manage.py runserver

4)使用密码登录管理服务器并添加产品,将成功添加产品。

解决方案 16:

我遇到了同样的问题,只是我有 2 个 sqlite 数据库和自定义数据库路由器。我设法通过将 Django 降级到 1.11.20 来使其正常工作,并且无需重新创建数据库。

解决方案 17:

你需要升级 Django,此问题已在此 PR 中修复https://github.com/django/django/pull/10733

解决方案 18:

首先,更新django版本:

pip install django --upgrade

然后

./manage.py makemigration
./manage.py migrate
./manage.py runserver

解决方案 19:

我在命令行上只做了 4 件事就解决了我的问题。

  1. ctrl + c(停止服务器)

  2. py manage.py makemigrations

  3. py manage.py migrate

  4. py manage.py runserver(启动服务器)

解决方案 20:

对于那些无法通过上述答案解决此错误的人,如果您使用“main”名称创建了应用程序,则此错误可能是由于应用程序名称相同而导致的。因此请尝试将应用程序名称“main”更改为其他名称。

解决方案 21:

我通过更改一些模型解决了这个问题。我有一个名为 project 和一个名为 projects。数据库表混乱了,并抛出了这个错误。

解决方案 22:

我已经使用以下方法解决了这个问题:

1)删除db.sqlit3

2)应用程序目录删除
pycache中的所有内容

3)manage.py makemigrations、manage.py migration、manage.py createsuperuser 然后 manage.py runserver。

解决方案 23:

我遇到了同样的问题,并通过执行以下操作解决了它:

1)获取最新django版本

2)获取最新SQL Lite版本

db.sqlite33)从项目中删除文件

4) 做一些小的改变models.py(例如改变字段的大小)

db.sqllite35)通过运行makemigrations&生成一个新文件migrate commands

6)将新创建的db.sqllite3文件导入SQL Lite

解决方案 24:

我安装/降级了 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. 

解决方案 25:

  1. 升级 Django
    pip install Django --upgrade

  2. 删除db.sqlite3项目根文件夹中的文件。

  3. 通过重新运行迁移在根文件夹中创建新的 db.sqlite3。
    python3 manage.py makemigrations

  4. 迁移
    python3 manage.py migrate

它可能只适用于此,或者如果它被删除,您可能需要创建一个新的超级用户。

  1. 使用以下方法检查您的超级用户

python manage.py shell
from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)   

如果<QuerySet []>出现则表示没有用户。否则检查您的用户是否存在。

  1. 如果您的用户不存在,请使用以下命令创建一个
    python manage.py createsuperuser

解决方案 26:

步骤:

  1. 从您的 ENV 中卸载当前的 Django。只需删除文件夹“anaconda3/envs/yourenv/lib/python3.7/site-packages/Django allversions”。

注意:仅适用于 Anaconda 用户,其他用户应该弄清楚如何从您的 ENV 中卸载软件包。

  1. 转到https://github.com/django/django

  2. 将 repo 下载为 zip 文件。

  3. 解压 zip。

  4. 切换到你的 ENV。

  5. 进入解压的文件夹。

  6. 运行"python setup.py install"并安装 Django。

  7. 删除以前的db.sqlite3文件。现在再次应用迁移来创建新db.sqlite3文件。

注意:我不知道如何修复以前的 dbfile 并防止数据丢失。所以如果你知道的话请告诉我。

  1. 运行服务器。

恭喜!现在一切正常。

从官方 Django 版本更新到一月份的最新 django。

解决方案 27:

请检查您是否没有从应用程序中删除迁移文件夹,如果已删除,请尝试恢复该文件夹并删除迁移文件,或者如果永久删除,请创建应用程序并复制粘贴您的工作并

然后

1. Delete db.sqlite3
2. python manage.py makemigrations
3. python manage.py migrate
4. python manage.py createsuperuser 

哈哈哈:)

解决方案 28:

  1. 删除db.sqlite3

  2. makemigrations迁移

  3. 创建新的超级用户

这对我有用

解决方案 29:

注意如果你在 Sqlite3 DB 中有一些个人数据,请不要使用此技巧,因为你将删除 Sqlite3 DB

我知道这个问题有很多答案,但只有这个技巧能帮助我解决这个问题,因为我是 Python 初学者,正在学习Django

  1. 停止运行 django 网络服务器,Ctrl-C

  2. 删除 db.sqlite3

  3. 卸载 Django 旧版本

  4. 使用“pip install django”安装最新版本的 Django

  5. 删除项目所有应用的所有迁移

现在在终端中运行这些命令

  1. python manage.py makemigrations

  2. python manage.py migrate

  3. python manage.py createsuperuser(提供超级用户凭证)

  4. python manage.py runserver

现在最终使用更新的超级用户凭据登录管理面板并尝试添加记录。

有人在此链接中提出了同样的建议

解决方案 30:

django-2.2.7

这对我有用-

1) 删除db.sqlite3。2

) 在每个应用程序中,在migrations文件夹中,删除__init__.py之外的所有内容。3

) 在每个应用程序中,删除pycache文件夹。

我不确定您是否必须对所有应用程序或仅对相关应用程序执行此操作,但这对我来说有效。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用