使用Python 2.7查询sqlite3数据库时出现“sqlite3操作错误:没有此表”

2 投票
2 回答
6744 浏览
提问于 2025-04-17 16:03

我下面的简单测试代码列出来了。我已经创建了表格,并且可以通过Firefox上的SQLite Manager插件查询它,所以我知道这个表格和数据是存在的。但是当我在Python中运行这个查询(并使用Python命令行)时,却出现了“没有这个表格”的错误。

def TroyTest(self, acctno):

    conn = sqlite3.connect('TroyData.db')
    curs = conn.cursor()

    v1 = curs.execute('''
    SELECT acctvalue 
    FROM balancedata
    WHERE acctno = ? ''', acctno)
    print v1  
    conn.close()

2 个回答

1

问题出在SQL语句上。你必须在表名之前指定数据库的名字...

'''SELECT * FROM 数据库名.表名 WHERE acctno = ? '''

11

当你给SQLite一个不存在的路径时,它会很高兴地为你打开一个新的数据库,而不是告诉你这个文件之前并不存在。这样一来,数据库就会是空的,你会遇到一个“No such table”(没有这样的表)的错误。

你使用的是相对路径来访问数据库,这意味着它会尝试在当前目录中打开数据库,而这个目录可能并不是你想的那个地方。

解决办法是使用绝对路径:

conn = sqlite3.connect('/full/path/to/TroyData.db')

你需要遍历游标才能查看结果:

curs.execute('''
    SELECT acctvalue 
    FROM balancedata
    WHERE acctno = ? ''', acctno)

for row in curs:
    print row[0]

或者调用fetchone()

print curs.fetchone()  # prints whole row tuple

撰写回答