6

我正在尝试用我的数据库做各种事情。我已经成功地连接并拉出数据并取出数据,没有问题。我一直在调试其他问题,然后突然我无法从我的数据库表中获取任何内容 - 我收到“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

4 回答 4

10

你把你的代码移到另一个地方了吗?

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

搜索带有名称的旧文件'mydatabase'并将其放入您的代码中。

于 2013-01-10T16:45:03.680 回答
4

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

Python 不进行路径扩展。因此您可能希望使用环境变量来存储数据库的路径。 链接到 WingWare 的环境变量扩展

于 2014-01-06T10:52:00.563 回答
2

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

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

因此 sqlite3 在该目录中创建一个空数据库。

于 2014-03-02T19:48:48.260 回答
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
于 2020-07-02T01:12:48.623 回答