如何在python中使用最新的sqlite3版本

jra*_*maa 6 python sqlite pysqlite

我需要在Amazon Linux中将sqlite版本3.8或更高版本与python一起使用。

我将sqlite安装更新为最新版本:

$ sqlite3 -version
3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d
Run Code Online (Sandbox Code Playgroud)

我也更新了pysqlite版本

pip install --upgrade pysqlite
Run Code Online (Sandbox Code Playgroud)

但是,我的pysqlite似乎仍然仅支持sqlite版本3.7:

$ python
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
>>>
>>> from pysqlite2 import dbapi2 as sqlite
>>> sqlite.version
'2.8.3'
>>> sqlite.sqlite_version
'3.7.17'
Run Code Online (Sandbox Code Playgroud)

如何更新sqlite python API以支持较新版本的sqlite?

wbr*_*cki 7

选项 1:使用此处的 pysqlite3 二进制版本(已预编译和链接了较新版本的 sqlite3 lib): https://github.com/coleifer/pysqlite3。基本上安装有

pip install pysqlite3-binary
Run Code Online (Sandbox Code Playgroud)

在 python 代码中,使用 pysqlite3 而不是 sqlite3,如:

pip install pysqlite3-binary
Run Code Online (Sandbox Code Playgroud)

替代方案: 重新安装python,安装python时,内置的python模块sqlite3(用于使用sqlite)正在编译并使用(编译)它自己的sqlite3 lib版本,无论您当前的系统中有什么(至少是这种情况)在 Windows 和 Mac 系统上,对于基于 UNIX 的系统也可能是这种情况)。


rco*_*oup 3

两个想法...

  1. 使用pyenv安装单独的解释器,并在创建时提供较新的 sqlite 的路径。例如:

    PYTHON_CONFIGURE_OPTS="LD_RUN_PATH=/usr/local/opt/sqlite/lib LDFLAGS=-L/usr/local/opt/sqlite/lib CPPFLAGS=-I/usr/local/include" pyenv install 3.4.3
    
    Run Code Online (Sandbox Code Playgroud)

    这个 pyenv 问题提供了一些更多的细节/想法。

  2. APSW提供了 SQLite 的最新实现,但与 pysqlite 库有不同的目标。

    APSW 提供了一个 SQLite 3 包装器,它在 SQLite 数据库库上提供了最薄的层。您可以通过 SQLite C API 完成的所有操作,都可以通过 Python 完成。尽管 APSW 看起来与 PEP 249 (DBAPI) 有点相似,但它不符合该 API,因为它的工作方式与 SQLite 3 的工作方式相反。(pysqlite 符合 DBAPI - 请参阅 apsw 和 pysqlite 2 之间的差异)。

    APSW 静态嵌入 SQLite“合并”发行版,因此您可以在可能还加载了另一个 SQLite 的环境(例如 Python)中安全地使用它。