apsw.SQLError: SQLError: no such vfs: zipvfs 尝试使用 python 和 apsw 在 Windows 上读取加密的 SQLite 文件时

问题描述 投票:0回答:1

我有一个在 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中尝试过)

python sqlite zlib apsw
1个回答
0
投票

(披露:我是 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
    
© www.soinside.com 2019 - 2024. All rights reserved.