为什么我突然得到“OperationalError:没有这样的表”?

时间:2013-01-10 16:36:19

标签: python sqlite

我正在尝试用我的数据库做各种事情。我已连接并将数据输出和输出成功,没有问题。我一直在调试其他问题,然后我突然无法从我的数据库表中得到任何东西 - 我得到“OperationalError:没有这样的表:文章”。

我真的很难过 - 这工作得很好,我正在查询数据库没有任何问题,并插入数据等等。然后我突然得到这个错误。我在错误开始出现之前做出的更改似乎完全不相关 - 我解除了它们并仍然得到了这个错误。这是我的脚本的开始,我收到错误:

import sqlite3

database='mydatabase'
db=sqlite3.connect(database)
c=db.cursor()

sql_command='SELECT id FROM article'
idlist=c.execute(sql_command)

我可以在SQLite Administrator中打开该数据库并验证该表是否存在。此外它还在工作。我还试图通过以下方式验证表格在哪里:

>>c.execute('select name from sqlite_master where type="table"').fetchall()
[]

所以有些事情真的很古怪。

我也尝试关闭并重新打开数据库连接和游标。并关闭Python会话。没有骰子。救命!

4 个答案:

答案 0 :(得分:8)

您是否已将代码移至其他位置?

因为sqlite将数据库存储到文件中,当您调用connect时,如果存在名为'mydatabase'的文件,则会加载它,否则将加载。将自动创建一个新的新数据库文件。

搜索名称为'mydatabase'的旧文件,并将其放在您的代码中。

答案 1 :(得分:3)

我遇到了与sqlite3和flask访问数据库完全相同的问题。我将代码中的数据库路径更改为完整路径,这解决了重新启动我的烧瓶应用程序后数据消失和找不到表的问题。我可以推荐SQLite Manager firefox插件,它有助于查看数据库表中的记录。按照此链接查看使用数据库Django beginner problem: manage.py dbsync

的完整路径引用解决的类似问题

Python不进行路径扩展。因此您可能希望使用环境变量来存储数据库的路径。 Link to WingWare's Environment Variable expansion

答案 2 :(得分:2)

我遇到了问题。就我而言,在尝试访问数据库之前,我有这一行:

 os.chdir("other/dir")
 conn = sqlite3.connect("database.db")

所以sqlite3在该目录中创建一个空数据库。

答案 3 :(得分:0)

我遇到了同样的问题,在我的情况下,我正在创建尝试在创建表之前先创建表,这是一个示例

Base.metadata.create_all(bind=engine)  # Wrong placement

class Currency(Base):
    __tablename__ = "currency"
    date = Column(Date, primary_key = True)
    rates = Column(String)

我通过替换Base Creator的位置进行了修复

class Currency(Base):
    __tablename__ = "currency"
    date = Column(Date, primary_key = True)
    rates = Column(String)

Base.metadata.create_all(bind=engine)  # Right placement