我在 Python 代码中遇到 SQLite 数据库问题。尽管创建表的代码似乎是正确的,但我收到以下错误消息: sqlite3.OperationalError:没有这样的表:songdata
我正在构建一个音乐测验程序,它与 SQLite 数据库交互以检索问题数据,作为我的最终 cs50p 项目。
我有一个继承自基类 Question 的类 Question1。 Question1 负责生成有关歌曲和艺术家的问题。 Question 类具有从 SQLite 数据库检索数据并获取用户输入来回答问题的方法。
尝试对“songdata”表执行查询时会发生错误,如果该表不存在,则应已创建该表。
con = sqlite3.connect("../music.db")
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS songdata(artist TEXT, album TEXT, song TEXT, date INTEGER)")
这是执行过程中发生错误的方法:
def get_line_from_db(self):
con = sqlite3.connect("music.db")
cur = con.cursor()
cur.execute('SELECT * FROM songdata ORDER BY RANDOM() LIMIT 1')
# res = cur.execute("SELECT * FROM songdata ORDER BY RANDOM() LIMIT 1")
results = cur.fetchall()
con.commit()
con.close()
# format result data
for result in results:
self.key_data = list(result)
artist, album, song, date = self.key_data
return artist, album, song, date
任何有关可能导致此问题的原因的见解或建议将不胜感激。谢谢你!我变得绝望了,因为我已经为此工作了一个多月了,它刚刚停止工作,我无法弄清楚。
我尝试过调整路径,但没有成功。我还尝试删除在项目文件夹中创建的数据库,但没有任何改进。我编写了这段代码的不同版本,从完整的程序到完整的oop,但没有运气。我只是希望能够从我基于 itunes api 创建的数据库中检索数据。
我在这里发帖是最后的手段。我在之前提出的问题和谷歌搜索中都没有找到任何解决我的问题的方法。我还观看了很多人们在 python 中使用 sqlite 的视频,但我就是无法弄清楚这一点。
您的代码引用了
"../music.db"
和 "music.db"
,两个完全独立的文件。
我建议将文件路径设置为常量,例如
DATABASE_FILE = "./music.db"
在程序的顶部,并在所有
sqlite3.connect()
调用中使用它,或者更好:
def connect_database():
return sqlite3.connect(DATABASE_FILE)
并使用它而不是单独的
sqlite3.connect(DATABASE_FILE)
调用。