我的问题让我很困惑,所以我决定最终创建一个帐户并寻求帮助:
我创建了一个名为 gamesapp.db 的数据库,其中包含一个名为 gamess 的表。当我在数据库浏览器中检查它时,我可以看到我之前创建的两行。
在我的程序中,我连接到 gamesapp 数据库,执行 select * from games 和 fetchall 以在 HTML 上打印它,但 fetchall 返回空白列表。
代码如下:
con = sql.connect('gamesapp.db')
cur = con.cursor()
cur.execute("select * from gamess")
print cur.fetchall()
我也试过
rows = cur.fetchall()
for row in rows:
print row
运气不好。 fetchall() 似乎仅在我使用
在程序中创建表时才起作用cur.execute(create table...)
这对我来说似乎很奇怪,因为如果我将“游戏”更改为不同的东西,Python 会说没有这样的表,而且如果我更改数据库名称,它会说它不存在 - 我就是不能找到问题所在。
最佳答案
The fetchall() only seems to work when I create the table within the program with
cur.execute(create table...)
这是因为您没有打开您认为打开的数据库文件。
sql.connect('gamesapp.db')
是相对于程序启动的目录。如果您的代码在网络服务器上执行,谁知道它可能在哪里?但您可以放心,这与您在命令行上测试代码时不同。 (您可以使用 import os; os.getcwd()
进行检查)
确保使用数据库文件的完整路径,并确保运行 Web 服务器的用户有权读取和写入它。
con = sql.connect('/full/path/to/my/gamesapp.db')
关于python - Sqlite3 不会获取数据库行,尽管它们存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41318237/