在python3中使用sqlite3进行JSON数据的操作,但是发现python中自带的sqlite3,没有扩展。
1. 查看sqlite3的编译选项
a = conn.execute("pragma compile_options;")
for i in a:
print(i)
输出结果如下:
('COMPILER=msvc-1924',)
('ENABLE_FTS4',)
('ENABLE_FTS5',)
('THREADSAFE=1',)
可以看到,其中并不包含JSON1的支持。
2. 编译sqlite3,增加json1扩展
sqlite3可以提供对于JSON数据的支持,为此需要在sqlite3编译时增加json1扩展。
下载sqlite3的amalgamation代码。解压后,在解压目录下,增加JSON扩展:
$cl sqlite3.c -O2 -DSQLITE_ENABLE_JSON1 -link -dll -out:sqlite3.dll
生成lib库:
$ lib sqlite3.obj
3. 编译pysqlite3
下载pysqlite3代码。
$git clone https://github.com/coleifer/pysqlite3
在pysqlite3中的setup.cfg中配置使用新编译生成的sqlite3.lib进行编译。
[build_ext]
# include_dirs=/usr/include
# library_dirs=/usr/lib
include_dirs=../sqlite-amalgamation-3320300
library_dirs=../sqlite-amalgamation-3320300
转换使用要安装的python环境,使用相应的python进行编译和安装。
$python setup.py build
$python setup.py install
验证,仍然使用上面的代码进行验证,其结果如下:
('COMPILER=msvc-1926',)
('ENABLE_FTS3',)
('ENABLE_FTS3_PARENTHESIS',)
('ENABLE_FTS4',)
('ENABLE_FTS5',)
('ENABLE_JSON1',)
('ENABLE_LOAD_EXTENSION',)
('ENABLE_RTREE',)
('ENABLE_STAT4',)
('ENABLE_UPDATE_DELETE_LIMIT',)
('THREADSAFE=1',)
增加的选项有点多。:)...