Python sqlite3.OperationalError: no such table:

Python sqlite3.OperationalError: no such table:

我正在尝试存储有关学校学生的数据。我以前做过一些 tables,比如密码和老师,我稍后会把它们放在一个程序中。

我几乎从其中一个复制了 create table 函数,并将值更改为 以供学生参考。它在其他程序上运行良好,但我不断收到:

sqlite3.OperationalError: no such table: PupilPremiumTable

当我尝试向 table 添加瞳孔时,它发生在行上:

cursor.execute("select MAX(RecordID) from PupilPremiumTable")

我查看了文件夹,里面有个叫PupilPremiumTable.db的文件,table之前已经创建过,不知道为什么不能用

这是我的一些代码,如果您需要更多代码,请随时告诉我,因为我之前说过它可以工作,所以我不知道为什么它不工作,甚至不知道什么不工作:

with sqlite3.connect("PupilPremiumTable.db") as db:
    cursor = db.cursor()
    cursor.execute("select MAX(RecordID) from PupilPremiumTable")
    Value = cursor.fetchone()
    Value = str('.'.join(str(x) for x in Value))
    if Value == "None":
        Value = int(0)
    else:
        Value = int('.'.join(str(x) for x in Value))
    if Value == 'None,':
        Value = 0
    TeacherID = Value + 1
    print("This RecordID is: ",RecordID)

您假设当前工作目录与您的脚本所在的目录相同。这不是您可以做出的假设。您的脚本正在另一个目录中打开一个 new 数据库,该目录是空的。

为您的数据库文件使用绝对路径。您可以将其基于脚本的绝对路径:

import os.path

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR, "PupilPremiumTable.db")
with sqlite3.connect(db_path) as db:

如果您想知道打开新数据库文件的位置,您可以使用 os.getcwd() 验证当前工作目录;您可能想清理您在那里创建的额外文件。

我必须面对同样的问题,有几种方法,但我认为最有可能的一种。

也许您正在将视图或查询加载到数据库,但您没有为 Django 提供足够的时间将模型迁移到数据库。这就是 "table doesn't exist".

的原因

确保在视图代码中使用这种初始化:

form RegisterForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(RegisterForm, self).__init__(*args, **kwargs)

第二种方法是清除以前的迁移,删除数据库并重新开始迁移过程。

首先,您需要检查 table 100% 是否存在于数据库中。您可以为此使用 sqlite 查看器:https://inloop.github.io/sqlite-viewer/.

如果table存在,那么你可以在''中写上你的table名字,例如:

Select * from 'TableName'

无论您的查询是什么,我只是以 Select * 为例。

我遇到了同样的问题,下面是我的解决方法。

  1. 我按 Ctrl+C 杀死了服务器
  2. 我删除了 pychache 文件夹。您将在项目文件夹中找到此文件夹。
  3. 我删除了 sqlite 数据库。
  4. 我使用 python manage.py makemigrations <app_name> 进行了迁移,其中 是包含导致错误的模型的特定应用程序。在我的例子中,它是邮件应用程序,所以我 运行 python manage.py makemigrations app.
  5. 我是正常迁移的
  6. 然后我启动了服务器,一切都解决了

我认为问题正如 Jorge Cardenas 所说:

Maybe you are loading views or queries to database but you haven´t granted enough time for Django to migrate the models to DB. That's why the "table doesn't exist".

这个解决方案是基于这个youtube video

我在关注 flask 博客教程时遇到了同样的问题。当它开始给我 sqlite3.OperationalError 时,我已经初始化了一次数据库:然后我尝试再次初始化,结果我的模式和 db.py 文件中有很多错误。修复它们并再次初始化,它起作用了。