Python sqlite3.OperationalError:无此表:

tjjdgumg  于 2023-08-06  发布在  SQLite
关注(0)|答案(7)|浏览(155)

我正在尝试存储有关学校学生的数据。我以前做过几个表,比如一个密码表和一个教师表,我以后会把它们放在一个程序中。
我已经从其中一个复制了创建表函数,并将值更改为Pupil的信息。它在其他程序上运行良好,但我一直得到:

sqlite3.OperationalError: no such table: PupilPremiumTable

字符串
当我尝试将一个pupil添加到表中时,它会出现在行中:

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


我在文件夹中查找,有一个名为PupilPremiumTable.db的文件,该表之前已经创建过,所以我不知道为什么它不工作。
下面是我的一些代码,如果你需要更多的话,请随时告诉我,就像我之前说的那样,它可以工作,所以我不知道为什么它不工作,甚至什么不工作:

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)

7d7tgy0s

7d7tgy0s1#

假设当前工作目录与脚本所在的目录相同。这不是一个你可以做出的假设。您的脚本正在不同的目录中打开一个 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()验证当前的工作目录;你可能想清理你在那里创建的额外文件。

qybjjes1

qybjjes12#

我遇到了同样的问题,这就是我如何解决它的。
1.我按下Ctrl+C杀死了服务器
1.我删除了pychache文件夹。您将在项目文件夹中找到此文件夹。
1.我删除了sqlite db。
1.我使用python manage.py makemigrations <app_name>进行了迁移,其中<app_name>包含导致错误的模型的特定应用程序。在我的情况下,它是邮件应用程序,所以我运行python manage.py makemigrations应用程序。
1.我以正常的方式迁移。
1.然后我启动了服务器,一切都解决了。
我相信问题就像豪尔赫·卡德纳斯说的那样:
也许你正在加载视图或查询到数据库,但你没有给Django足够的时间将模型迁移到数据库。这就是为什么“table不存在”。
此解决方案基于此youtube video

alen0pnh

alen0pnh3#

首先,您需要检查该表是否100%存在于数据库中。你可以使用sqlite viewer来实现:https://inloop.github.io/sqlite-viewer/的数据。
如果表存在,那么你可以用''写你的表名,例如:

Select * from 'TableName'

字符串
无论你的查询是什么,我只是使用Select *作为一个例子。

iklwldmw

iklwldmw4#

我必须面对同样的问题,有几种方法,但我认为最有可能的一种。
也许你正在加载视图或查询到数据库,但你没有给Django足够的时间将模型迁移到数据库。这就是为什么“table不存在”。
确保在视图的代码中使用以下类型的初始化:

form RegisterForm(forms.Form):

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

字符串
第二种方法是清理以前的迁移,删除数据库,然后重新开始迁移过程。

bbuxkriu

bbuxkriu5#

当我跟随 flask 博客教程时,我遇到了同样的问题。我已经初始化了数据库一次,当它开始给我sqlite3.OperationalError:然后我试图再次初始化,结果发现我的模式和www.example.com文件中有很多错误db.py。修复它们并再次初始化,它工作了。

qjp7pelc

qjp7pelc6#

添加这个对我有用:

import os.path

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_dir = (BASE_DIR + '\\PupilPremiumTable.db')

字符串
请注意,要使代码正常工作,需要在PupilPremiumTable.bd之前添加\\

xvw2m8pv

xvw2m8pv7#

只需检查在第一个执行命令中创建的表的名称。它必须与要插入条目的表的名称匹配。

相关问题