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