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

cld4siwp  于 2023-02-19  发布在  SQLite
关注(0)|答案(4)|浏览(229)

我需要使用sqlite版本3. 8或更高版本与python在亚马逊Linux。
我更新了我的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?

bbuxkriu

bbuxkriu1#

**选项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的系统上也可能是这样)。

6za6bjd0

6za6bjd02#

两个想法...
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提供了一些更多的细节/想法。

  1. APSW提供了SQLite的最新实现,但目标与pysqlite库不同。
    APSW提供了一个SQLite 3 Package 器,它在SQLite数据库上提供了可能的最薄的层。你可以从SQLite C API做的一切,你可以从Python做。虽然APSW看起来有点像PEP 249(DBAPI),但它不兼容该API,因为它的工作方式是SQLite 3。(pysqlite是DBAPI兼容的-请参阅apsw和pysqlite 2之间的区别)。
    APSW静态地嵌入了SQLite“合并”发行版,因此您可以在可能加载了另一个SQLite的环境(例如Python)中安全地使用它。
chy5wohz

chy5wohz3#

APSW有一个非官方的Python wheel发行版,它本身并没有在PyPI上发布:
APSW在Python Package Index(pypi)中不可用,因此不能从它安装。(一个随机的人把一个过时的质量差的上传放在APSW名称下。它与这个项目没有任何用处。)
我猜这个原因要早于Python轮子。
Wheel分发包叫做apsw-wheels(和GitHub repo)。除了PyPy Wheels之外,它对我来说工作得很好。

zaqlnxep

zaqlnxep4#

所以,我花了几天时间在Cygwin中尝试解决这个问题。我需要在一个新项目中使用最新的SQLite和python39。如果你想继续使用python的sqlite3库,请遵循以下步骤:

  • 从www.example.com站点下载最新的SQLite预发布快照sqlite.org site
  • $wget https://sqlite.org/snapshot/sqlite-snapshot-202302131932.tar.gz
  • 解压缩快照
  • $tar xvf数据库快照
  • cd到解压缩目录:
  • $cd sqlite快照-202302131932
  • 运行./configure--prefix =/usr(这将覆盖任何版本的SQLite3库)
  • $./配置--前缀=/usr
  • 安装新配置
  • $make安装

就这样。这个脚本会让你看到变化:

  • $目录www.example.comSQLiteVersion.py
#!/usr/bin/python3
import sqlite3

def ConnectToDB(sdb):
    return sqlite3.connect(sdb)

print(sqlite3.sqlite_version)
print(sqlite3.__path__)

DB = ":memory:"
con = ConnectToDB(DB)
cur = con.cursor()
cur.execute("SELECT sqlite_version(),sqlite_source_id();")
for row in cur:
     print(row[0] + '\r\n' + row[1])

con.close()

输出应该如下所示:

$ ./SQLiteVersion.py
3.41.0
['/usr/lib/python3.9/sqlite3']
3.41.0
2023-02-13 12:46:22 d35de3ad3fac6b30d3f266cbe4b1e9923eb31a1eff4a869205bbc3ba122eeec5

相关问题