Python sqlite3.OperationalError:没有这样的表:

时间:2015-01-24 13:44:47

标签: python database sqlite

我正在尝试在学校存储有关学生的数据。我以前做了几张桌子,比如密码和教师用的一张桌子,我稍后会把它们放在一个程序中。

我几乎从其中一个中复制了create table函数,并将值更改为Pupil的信息。它在其他程序上工作正常,但我一直在:

sqlite3.OperationalError: no such table: PupilPremiumTable

当我尝试将瞳孔添加到表格时,它出现在该行上:

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)

3 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:0)

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

也许您正在将视图或查询加载到数据库,但是您没有给Django足够的时间来将模型迁移到DB。这就是为什么“表不存在”的原因。

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

form RegisterForm(forms.Form):

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

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

答案 2 :(得分:0)

首先,您需要检查datbase中该表是否100%存在,您可以使用sqlite查看器 https://inloop.github.io/sqlite-viewer/

如果存在表,则可以在''中输入表名

'''从'TableName'中选择*'''

无论您要查询什么,我都仅以Select *为例