我有一个在 Linux 下工作的代码,我正在尝试将其移植到 Windows 上。它使用 apsw 来处理加密的 SQLite 文件。
flags = apsw.SQLITE_OPEN_READWRITE | apsw.SQLITE_OPEN_CREATE | apsw.SQLITE_OPEN_URI
connection_string = (
"file:{filepath}?zv=zlib&level=9&vfs=zipvfs&password256={password}".format(
filepath=filepath, password=password
)
)
connection = apsw.Connection(connection_string, flags=flags)
当我尝试在 Windows 下运行它时,它会抛出此错误:
apsw.SQLError: SQLError: no such vfs: zipvfs
我已经下载了
zlibwapi.dll
并将其放在System32下,我也尝试过从源代码构建apsw
python setup.py fetch --all build --enable-all-extensions install
但我仍然收到错误。 (在Python 3.10和3.11中尝试过)
(披露:我是 APSW 作者)
ZipVFS 是一款单独许可的软件。这就是为什么当您请求获取所有内容并启用所有扩展时,APSW 无法下载并包含它。据我所知 zlibwapi.dll
只是压缩例程,不包括 zipvfs 代码。您需要在 Windows 下执行与 Linux 下相同的操作才能包含 zipvfs 代码。至少应该工作的是创建一个包含 APSW 源的
sqlite3
目录,并在该
sqlite3
目录中放置名为
sqlite3-zipvfs.c
的
sqlite3.c
。然后再次运行
setup.py
行,但排除获取位。在输出的前几行中,您将看到类似的内容因您所在的目录而异。
SQLite: Using amalgamation C:\projects\apsw\sqlite3\sqlite3.c