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 *
为例。
我遇到了同样的问题,下面是我的解决方法。
- 我按 Ctrl+C 杀死了服务器
- 我删除了 pychache 文件夹。您将在项目文件夹中找到此文件夹。
- 我删除了 sqlite 数据库。
- 我使用
python manage.py makemigrations <app_name>
进行了迁移,其中 是包含导致错误的模型的特定应用程序。在我的例子中,它是邮件应用程序,所以我 运行 python manage.py makemigrations app.
- 我是正常迁移的
- 然后我启动了服务器,一切都解决了
我认为问题正如 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 文件中有很多错误。修复它们并再次初始化,它起作用了。
我正在尝试存储有关学校学生的数据。我以前做过一些 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 *
为例。
我遇到了同样的问题,下面是我的解决方法。
- 我按 Ctrl+C 杀死了服务器
- 我删除了 pychache 文件夹。您将在项目文件夹中找到此文件夹。
- 我删除了 sqlite 数据库。
- 我使用
python manage.py makemigrations <app_name>
进行了迁移,其中是包含导致错误的模型的特定应用程序。在我的例子中,它是邮件应用程序,所以我 运行 python manage.py makemigrations app. - 我是正常迁移的
- 然后我启动了服务器,一切都解决了
我认为问题正如 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 文件中有很多错误。修复它们并再次初始化,它起作用了。