python自带sqlite_强制Python放弃本地sqlite3并使用(已安装)最新的sqlite3版本

sqlite3支持在Python中可能有点混乱。 sqlite数据库适配器作为一个单独的项目

pysqlite2开始,但对于Python 2.5,它的一个版本被合并到名为

sqlite3的Python标准库中。原始的适配器继续作为单独的项目开发,而定期的Python版本本身被更新以匹配它。如果您尝试使用较新版本的适配器,它通常安装为pysqlite2,以免与标准库中包含的版本冲突。而且,根据它是如何构建的,它可能链接到底层

sqlite3 database library的不同版本。因此,请确保您正确导入它:

>>> import sqlite3

>>> sqlite3.version_info

(2, 4, 1)

>>> sqlite3.sqlite_version_info

(3, 6, 11)

>>> from pysqlite2 import dbapi2 as sqlite3

>>> sqlite3.version_info

(2, 5, 5)

>>> sqlite3.sqlite_version_info

(3, 6, 18)

version_info是sqlite3(pysqlite2或内置的sqlite3)数据库适配器的版本。

sqlite_version_info是底层sqlite3数据库库的版本。

使用from … import … as sqlite3建议,这样,如果你从一个版本移动到另一个版本,其余的代码不需要更改。

注意,enable_load_extension首次出现在pysqlite2 2.5.0中。

编辑:默认情况下,在构建适配器时禁用enable_load_extension。要启用它,您可以手动构建pysqlite2。下面的配方假设一个unix-y系统和pysqlite2的最新版本,在本文写作是2.5.5。

首先,如果您最初通过easy_install安装适配器,请先卸载它,首先运行:

$ sudo /path/to/easy_install -m pysqlite # or whatever package name you first used

将有一些输出,包括如下行:

Removing pysqlite 2.5.5 from easy-install.pth file

Using /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

使用列出的文件名删除鸡蛋(名称将取决于您的平台和版本,它可能会引用一个文件或目录):

$ sudo rm -r /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

现在下载并提取pysqlite-2.5.5源码包:

$ mkdir /tmp/build

$ cd /tmp/build

$ curl http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz | tar xz

$ cd pysqlite-2.5.5

然后编辑setup.cfg文件以注释掉SQLITE_OMIT_LOAD_EXTENSION指令:

$ ed setup.cfg <

> /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/

> w

> q

> EOF

由于sqlite3的版本是如此老(3.4.0),你也应该使用最新的sqlite3库。这在pysqlite2 setup.py脚本中很容易:

$ /path/to/python2.x setup.py build_static

这将自动下载最新的sqlite3 amalgamation source和构建适配器以及一个最新的静态链接版本的sqlite3。此步骤可能需要很长时间才能完成。

UPDATE(2015/07/21):根据最新的pysqlite 2.6.3 commit,你必须自己下载sqlite源代码,并将它们放在pysqlite根文件夹。

现在,安装适配器:

$ sudo /path/to/python2.x setup.py install

并运行测试:

$ cd # somewhere out of the build directory

$ /path/to/python2.x

>>> from pysqlite2 import test

>>> test.test()

如果他们通过,你应该全部设置。

作为奖励,如果你想要加载扩展支持的原因是使用sqlite3的全文搜索扩展,FTS3,你应该发现它被包括作为静态库的一部分,不需要进一步的工作:

>>> from pysqlite2 import dbapi2 as sqlite3

>>> con = sqlite3.connect(":memory:")

>>> con.execute("create virtual table recipe using fts3(name, ingredients)")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值