sqlite3.Connection'对象没有属性'enable_load_extension

时间:2019-11-16 15:03:14

标签: python sqlite

在python3.7.4上加载sqlite3模块并请求enable_load_extension给出:

import sqlite3
conn=sqlite3.connect("./tests/data/ne_110m_admin_0_countries.sqlite")
conn.enable_load_extension(True)

AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'

我了解默认的Ubuntu sqlite3软件包是在不激活load_extension的情况下构建的。我已遵循以下准则:https://charlesleifer.com/blog/compiling-sqlite-for-use-with-python-applications/

基本上,已编译带有标志:-DSQLITE_ENABLE_LOAD_EXTENSION的sqlite3,使用pyenv并在详细模式下构建python 3.7.4,我也可以看到正在使用负载扩展标志,也遵循上述教程并重新安装pysqlite3在pyenv上

在详细模式下运行python:

>>> import sqlite3
# /home/jesus/.pyenv/versions/3.7.4/lib/python3.7/sqlite3/__pycache__/__init__.cpython-37.pyc matches /home/jesus/.pyenv/versions/3.7.4/lib/python3.7/sqlite3/__init__.py

模块的路径正确。

使用sqlite3客户端:

jesus@earth:~/.pyenv/versions/3.7.4/bin$ sqlite3
SQLite version 3.31.0 2019-11-16 12:04:38
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> SELECT sqlite_compileoption_used('ENABLE_LOAD_EXTENSION');
1

我看到sqlite是使用适当的选项构建的

尽管如此,我仍然继续犯同样的错误:AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'

更新 通过SQL请求,如果库是使用加载的加载扩展编译的,则回复为肯定

cursor=conn.cursor() 
res=cursor.execute("SELECT sqlite_compileoption_used('ENABLE_LOAD_EXTENSION');") 
res.fetchall() [(1,)]

我不知道该怎么做才能调试问题。这是在pyenv构建上发生的

任何提示?

1 个答案:

答案 0 :(得分:4)

必须为SQLite和python选项安装带有增强系统变量的python。这对我有用:

# Do the following in your shell
LDFLAGS="-L/usr/local/opt/sqlite/lib -L/usr/local/opt/zlib/lib" CPPFLAGS="-I/usr/local/opt/sqlite/include -I/usr/local/opt/zlib/include" PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions" pyenv install 3.7.6