查看: 1978|回复: 3

AttributeError: 'sqlite3.connection' object has no property 'enable_load_exte...

[复制链接]

13

主题

53

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2018-9-19 15:24:48 | 显示全部楼层 |阅读模式
错误信息是:
AttributeError: 'sqlite3.connection' object has no property 'enable_load_extension'
我使用’easy_install’安装了最新的sqlite3版本, sqlite3.version为3.6.13。在这个版本中,Connection应该具有“enable_load_extension”属性。
我认为正在进行的是python仍然使用本机自带的sqlite3模块,我认为是2.4.1,因为代码sqlite3.version(iso sqlite3.version_info)输出2.4.1。
问题是如何强制python使用新的sqlite3模块进行所有sqlite3调用?
回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-9-19 15:33:52 | 显示全部楼层
Python中的sqlite3支持可能有点令人困惑。sqlite最初是作为一个单独的项目pysqlite2开始的,但是对于Python 2.5,它的一个版本以sqlite3的名称合并到Python标准库中。原始sqlite继续作为单独的项目开发,同时定期更新Python本身的版本以匹配它。如果你尝试使用较新版本的sqlite,通常会安装pysqlite2为不与标准库中包含的版本冲突。而且,根据它的构建方式,它可能链接到底层sqlite3数据库的不同版本。因此,请确保你正确导入它:
>>> 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首先出现在pysqlite22.5.0中。
编辑: enable_load_extension在构建适配器时默认禁用。要启用它,你可以pysqlite2手动构建。以下配方假定unix-y系统和最新版本pysqlite2,首先,如果你最初使用easy_install安装了 sqlite,请先运行以下命令将其卸载:
$ 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源tarball:
$ mkdir /tmp/build
$ cd /tmp/build
$ curl http://oss.itsystementwicklung.d ... sqlite-2.5.5.tar.gz | tar xz
$ cd pysqlite-2.5.5
然后编辑该setup.cfg文件以注释掉该SQLITE_OMIT_LOAD_EXTENSION指令:
$ ed setup.cfg <<EOF
> /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/
> w
> q
> EOF
由于版本sqlite3太旧(3.4.0),你还应该使用最新的sqlite3库构建。这在pysqlite2setup.py脚本中很简单:
$ /path/to/python2.x setup.py build_static
这将自动下载最新的sqlite3合并源并构建适配器以及最新的静态链接版本sqlite3。此步骤可能需要很长时间才能完成。
更新(2015/07/21):根据最新的pysqlite 2.6.3提交,你必须自己下载sqlite源代码并将它们放在pysqlite根文件夹中。
现在,安装sqlite:
$ 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()
回复

使用道具 举报

5

主题

41

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2018-9-19 15:35:33 | 显示全部楼层
我的Windows机器上有python 2.7,内置的sqlite3.sqlite_version是3.6.x. 通过执行以下步骤,我能够使用sqlite 3.7.9。
1.        下载并解压缩预编译的二进制DLL(http://www.sqlite.org/download.html上的“sqlite-dll-win32-x86-3070900.zip” )
2.        (此时可能应关闭所有python实例以保证安全)转到C:\ Python27 \ DLLs并将“sqlite3.dll”的文件名更改为“sqlite3.dll.old”
3.        将文件“sqlite3.dll”复制到文件夹C:\ Python27 \ DLLs
4.        打开python shell并导入sqlite3
5.        验证sqlite3.sqlite_version显示为'3.7.9'
回复

使用道具 举报

4

主题

37

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2018-9-19 15:37:01 | 显示全部楼层
你需要查看Python路径并确保所需的sqlite安装在比内置sqlite更前面的目录中。
你可以看到路径:
  1. import sys
  2. print sys.path
复制代码

如果你想了解模块的来源,请尝试:
  1. print sqlite3.__file__
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表