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

时间:2018-02-19 11:40:09

标签: python sqlite pysqlite

我需要在Amazon Linux中使用sqlite 3.8或更高版本的python。

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

$ sqlite3 -version
3.22.0 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d

我还更新了我的pysqlite版本

pip install --upgrade pysqlite

但是,我的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'

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

4 个答案:

答案 0 :(得分:0)

两个想法...

  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
    

    This pyenv issue提供了更多详细信息/想法。

  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)中安全地使用它。

答案 1 :(得分:0)

这看起来很奇怪。由于某些原因,更新的sqlite版本未反映在Python上。下载最新的python。提取焦油。尝试重新编译,制作并再次安装python。可能有效!

答案 2 :(得分:0)

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

pip install pysqlite3-binary

在python代码中,使用pysqlite3代替sqlite3,如:

import pysqlite3
    (...) conn = pysqlite3.connect(r"filename")

替代: 重新安装python,安装python时,内置的python模块sqlite3(用于sqlite)正在编译并使用(编译)自己版本的sqlite3 lib,而与系统中当前的版本无关(至少在Windows上就是这种情况)和Mac系统,基于Unix的系统也可能如此。

答案 3 :(得分:0)

APSW 的非官方 Python 轮分布,它本身 doesn't release on PyPI

<块引用>

APSW 在 Python 包索引 (pypi) 中不可用,因此无法从中安装。 (一个随机的人在 APSW 名称下放了一个过时的质量差的上传。它与这个项目没有任何关系。)这样做的原因是 [...]

我假设原因早于 Python 轮子。

轮子分发包称为apsw-wheels(和GitHub repo)。除了 PyPy 轮子之外,它对我来说效果很好。