我想在 Python 中为 SQLite 使用 json1 扩展。根据官方文档,它应该是一个可加载的扩展。我从源代码中得到了 json1.c 文件,并按照官方说明将其编译为 json1.so ,没有任何错误。
$ gcc -g -fPIC -shared json1.c -o json1.so
当我尝试根据sqlite3 文档在 Python 2.7.12(和 3.5.2)中加载扩展时出现了问题。
>>> import sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.enable_load_extension(True)
>>> con.load_extension("./json1.so")
我收到以下回溯错误消息。我从包含 json1.so 文件的文件夹中运行 Python 解释器。尽管由于最后一个冒号似乎应该有更多信息,但以下是完整的错误消息。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: error during initialization:
在 Python 中实际上不可能使用 json1 作为可加载扩展吗?正如Charles Leifer在这篇博文中所解释的那样,我唯一的选择是重新编译 SQLite、pysqlite2 等吗?
编辑:
事实证明,我收到了错误,因为我的机器已经启用了这个和其他扩展。启用已启用扩展的操作触发了错误。到目前为止,我可以访问的所有 linux 计算机都已经在 Python 附带的 SQLite 中启用了 json1 和 fts5 扩展。您可以通过连接到 SQLite 数据库并运行以下查询来检查已使用哪些编译选项。
PRAGMA compile_options;