c.execute('select sum(unused), sum(pgsize), sum(payload), count(*) from dbstat')
或
c.execute('select sum(unused), sum(pgsize), sum(payload), count(*) from main.dbstat')
我正在使用
sqlite3
数据库,并且我正在尝试从 dbstat
表中获取数据库的统计信息。这条线在 Linux
上工作正常,但在 Window
上工作正常。在这两种情况下,我确保使用相同的 sqlite3
版本和相同的 python3
版本。我很想知道为什么这在 Windows 上不起作用。
错误:
c.execute('select sum(unused), sum(pgsize), sum(payload), count(*) from dbstat') sqlite3.OperationalError: no such table: dbstat
@Shawn ...好吧,弄清楚发生了什么事。
Windows
上的 Python 与 sqlite3.dll
上的 Python 具有不同的 Linux
。 Windows
上的那个没有 SQLITE_ENABLE_DBSTAT_VTAB
。为了使它工作,你可以像@Shawn所说的那样从源代码中自己编译sqlite3.dll,或者你可以从他们的网站下载编译后的dll,它启用了该选项,并将其添加到目录中的DLLs
文件夹中python 导演。
您可以通过调用检查sqlite3编译选项
PRAGMA compile_options;
如果你想检查Python
sqlite3.dll
运行这个Python脚本
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('PRAGMA compile_options;')
available_pragmas = c.fetchall()
print(available_pragmas)
conn.close()
Python3.7 输出将如下所示
[('COMPILER=msvc-1916',), ('ENABLE_FTS4',), ('ENABLE_FTS5',), ('THREADSAFE=1',)]
对于Windows,从sqlite3下载页面下载sqlite3 64位,然后将sqlite3.dll粘贴到python dlls文件夹中,然后它解决了dbstat错误