如何修复 - 没有这样的表:main.auth_user__old

Posted

技术标签:

【中文标题】如何修复 - 没有这样的表:main.auth_user__old【英文标题】:How to fix-no such table: main.auth_user__old 【发布时间】:2019-06-01 21:06:58 【问题描述】:

有人可以详细解释如何修复ERROR: no such table: main.auth_user__old

当我尝试将数据添加到我的注册模型时,它会出现在我的 Django 应用程序中。

【问题讨论】:

你可以在这里找到解决方案***.com/questions/53637182/… 【参考方案1】:

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

1) 删除db.sqlit3

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

3) manage.py makemigrations, manage.py migrate, manage.py createsuperuser 然后 manage.py runserver。

【讨论】:

它不能解决问题。我仍然收到同样的信息。【参考方案2】:

如果您使用的是 django==2.1,那么您可能会收到此错误。 只需安装 django==2.1.5 再次启动您的 Django 项目 它会起作用的。

【讨论】:

【参考方案3】:

这是最新的 SQLite 和 Django 之间的兼容性问题。见这里:Django - No such table: main.auth_user__old

【讨论】:

那么如何在运行时将 Sqlite 降级到 2.5.1? 如果您手动安装它,您可以只安装旧版本。由于您的问题,我假设您没有,因此您使用的是系统提供的 SQlite。你不应该尝试降级它,它可能会破坏你的系统。尝试使用来自 github (github.com/django/django) 的 Django master 分支或使用描述的解决方法 (***.com/a/53848684/140450)。【参考方案4】:

这发生在我作为新手的时候,当时我正在学习 Mosh 关于最终项目 3:Django 的介绍课程。这是修复,通常使用 Pycharm 或等效的(无需更改任何代码):

    关闭 PyCharm 或其他“运行服务器”实例中的所有终端窗口 删除db.sqlite3

然后像这样在终端窗口中升级 Django pip install --upgrade django==2.1.5 一旦完成,你就重新构建。

    在 PyCharm 中打开一个终端窗口,输入:python manage.py makemigrations 并回车。它应该说没有检测到变化。 然后输入:python manage.py migrate,它将重建 db.sqlite3 然后:python manage.py runserver 并让它运行。 打开一个新终端,输入python manage.py createsuperuser 并按照提示操作。 打开http://127.0.0.1:8000/admin,输入您刚刚创建的详细信息,您就可以开始工作了。

【讨论】:

【参考方案5】:

首先你不必改变你的代码,问题在于你的 django 版本 我很确定你正在关注 mosh 的教程或类似的东西, 要解决此问题,请按照以下步骤操作:

    退出您正在使用的 IDE 从计算机中的文件夹中删除 db.sqlite,而不是在 IDE 中 打开您的 IDE 并使用此命令升级您的 django 版本 pip install --upgrade django==2.1.5 运行此命令 python manage.py makemigrations 然后运行这个命令 python manage.py migrate 这将帮助您 Enchallah

【讨论】:

【参考方案6】:

当我使用 python shell 而不是 UI 添加到数据库时,错误不再显示

$ python manage.py shell

在 python 外壳中

from AppName.models import Product
Product.objects.create(title='Newer', price=239.99, summary='awesome')

【讨论】:

【参考方案7】:

无需降级到任何版本的 Django 或 SQL Lite,但如果您按照我在此 GitHub 链接https://github.com/komerela/django_troubleshooting 中概述的步骤进行操作,您应该可以继续... 一旦您点击标记为的 pdf 文档"对 SQLITE3 问题的分步排序解决方案.pdf"

不客气!

【讨论】:

欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下有用:在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在它,然后引用在目标页面不可用的情况下,您链接到的页面的最相关部分。 SQLite 3.26 重新指向表重命名的外键约束,即使foreign_keys pragma 关闭,这会破坏每个需要重建表以模拟不受支持的 ALTER TABLE 语句的操作。幸运的是,新引入的 legacy_alter_table pragma 允许禁用此行为并恢复以前的模式编辑器假设。来自 GitHub django 文件 @UsamaAbdulrehman 该 GitHub 链接指向确切的页面,如果您复制链接地址,它每次都会生成一个唯一的会话 ID,因此无法复制,但任何人都可以访问和下载该 repo 中的 pdf 文档因为我已将其设为公开回购。谢谢!【参考方案8】:

我知道这个问题很久以前就遇到过,我不想让任何人再次陷入困境:

Step1:解决方法是检查Django版本是否为2.1,然后更新到2.2或更高版本。

Step2:更新到 Django==2.2 或更高版本后从迁移文件夹中删除所有旧迁移并删除 db.sqlite3,然后再次运行 makemigrations 和迁移。会解决的。

祝你好运!

【讨论】:

【参考方案9】:

您可能尚未运行迁移。在您运行迁移之前,不会创建任何表。因此错误。 见https://docs.djangoproject.com/en/2.1/topics/migrations/#workflow

注册模型后,转到 git bash 或 powershell。确保您位于项目目录中。然后运行这些命令:

python manage.py makemigrations

然后

python manage.py migrate

这些命令将为您创建表格,然后您可以向其中添加数据。

【讨论】:

那么如何在 Django 中运行时将 Sqlite 降级到 2.5.1?

以上是关于如何修复 - 没有这样的表:main.auth_user__old的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 localhost xampp 中损坏的表“global_priv”

如何在 mysql 中修复或删除/创建损坏的表?

如何捕捉没有这样的表错误糖?

如何修复 kubernetes nfs 挂载错误没有这样的文件或目录

file_get_contents() 如何修复错误“无法打开流”、“没有这样的文件”

如何修复 laravel 作曲家更新问题( Illuminate\Foundation\ComposerScripts::postAutoloadDump 无法打开流:没有这样的文件或目录)