【问题标题】:SQLITE database error "sqlite3.OperationalError: no such table: table"SQLITE 数据库错误“sqlite3.OperationalError:没有这样的表:表”
【发布时间】:2021-10-18 07:22:29
【问题描述】:

我很困惑... 我有一个文件“calculation.py”,其中包含以下代码:

conn = sqlite3.connect('matchprediction.db')
c = conn.cursor()

c.execute("SELECT * FROM spielplan WHERE table = 8")

此外,我通过 django 中的本地主机运行该文件以模拟网络服务器。

每当我使用 python manage.py runserver 启动服务器时,我都会收到错误消息:

sqlite3.OperationalError: no such table: table

数据库肯定存在,表本身也存在。已经用数据库浏览器检查过了。 compute.py 有效,因为它从该表中检索数据以执行计算。运行窗口中的输出结果是正确的。

我做错了什么,我该如何解决?

【问题讨论】:

  • 您确定它打开的是正确 matchprediction.db吗?由于您没有使用绝对路径,它是相对于服务器的工作目录的,可以是任何东西。
  • 好吧,我有两个 matchprediction.db。一个在项目文件夹中(空),一个在 app 文件夹中(包含表格及其内容)。我猜它是正确的 matchprediction.db,因为否则脚本中的计算将不起作用。如果我将鼠标悬停在 matchprediction.py 上,复制路径,浏览到该路径并打开特定的 matchprediction.py,它包含表“spielplan”和我需要的所有数据。
  • 您的表spielplan 似乎有一个名为table 的列。但在大多数 SQL 方言中,table 是保留字(如create table)。

标签: python django sqlite


【解决方案1】:

嗯,我有两个 matchprediction.db。一个在项目文件夹中(空),一个在 app 文件夹中(包含表格及其内容)。

项目文件夹中的空文件夹是由正在运行的 Django 服务器创建的,项目文件夹作为工作目录,您使用相对路径调用 sqlite3.connect()

如果您在命令行上运行(或已经运行)app/calculation.py,则该脚本的工作目录将是 app/

如果你想让这个更防弹,你可以用

形成数据库的真实路径
import os

database_path = os.path.join(os.path.dirname(__file__), 'matchprediction.db')

conn = sqlite3.connect(database_path)

– 即始终将matchprediction.db 锚定到具有database_path = 行的模块路径,而不是工作目录。

【讨论】:

  • 这对我有用。非常感谢!不幸的是还不能投票给你。但是会在我的睡前祈祷时考虑你:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 2016-02-20
  • 2017-05-16
相关资源
最近更新 更多