sqlite 如何使用enable_load_extension()?

kuuvgm7e  于 2023-08-06  发布在  SQLite
关注(0)|答案(3)|浏览(179)

我在使用enable_load_extension()时遇到以下错误:
属性错误:“sqlite3.Connection”对象没有属性“enable_load_extension”
我也看到了这一点,但sqlite3应该与Python一起提供。如何用正确的选项重新安装它?
sqlite3模块在默认情况下不支持可加载扩展,因为某些平台(特别是Mac OS X)的SQLite库在编译时没有此功能。要获得可加载扩展支持,必须传递-enable-loadable-sqlite-extensions来configure。

juzqafwq

juzqafwq1#

检查sqlite3是否在构建时启用了扩展加载。您可以通过运行可执行文件和.dbconfig命令进行检查

$ sqlite3
SQLite version ...
...
sqlite> .dbconfig
...
load_extension on

字符串
如果不是这样,请通过Homebrew安装sqlite或从源代码see docs编译。
然后,您希望使用链接的适当sqlite3库从头开始构建Python。使用pyenv非常简单。可以通过PYTHON_CONFIGURE_OPTS环境变量(详细信息为here)和设置CPPFLAGSLDFLAGS(参见here)提供特定的构建选项。
使用pyenv构建,假设sqlite3是通过Homebrew安装的(查看which sqlite3brew info sqlite以了解安装版本和位置的详细信息):

PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=\$(brew --prefix openssl)" \
LDFLAGS="-L/usr/local/opt/sqlite/lib" \
CPPFLAGS="-I/usr/local/opt/sqlite/include" \
pyenv install 3.8.2


您可能还必须满足Python3的一些依赖项(例如在macos brew install openssl xz gdbm上)
手动构建Python也非常简单,并且遵循类似的模式。一旦满足依赖关系,下载包含所需版本的tarball并设置编译选项以启用sqlite3扩展加载(并告诉make在哪里可以找到新编译的SQLite构建):

./configure --enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=$(brew --prefix openssl)
LDFLAGS="-L<path-to-sqlite>" \
CPPFLAGS="-I<path-to-sqlite>" \
make -j2

mrwjdhj3

mrwjdhj32#

如果你的Python sqlite3模块不支持加载扩展,你可以通过使用sqlean.py包来解决这个问题。
它是标准库的sqlite3模块的直接替代品,已经为Windows,Linux和macOS预编译,因此您不需要编译任何东西。

pip install sqlean.py

个字符

b0zn9rqh

b0zn9rqh3#

您需要找到安装Python的文件夹并重新安装它。
docdev guide中,您可以找到有关编译器配置的更多信息。
第1步:跟踪当前配置

import sysconfig
sysconfig.get_config_vars('CONFIG_ARGS')[0]

字符串
步骤2:重新安装(从python的文件夹里面!)

Python-3.X $ ./configure --with-pydebug \ # for example & add your previous configuration
                         --enable-loadable-sqlite-extensions # <-

Python-3.X $ make -s -j2          # amount of processors
Python-3.X $ sudo make altinstall # doesn't overwrite previous installations


步骤3:再次检查步骤1的配置

Python-3.X $ ./python # check the prompt
>>> import sysconfig #    etc


步骤4:更新路径、环境变量等
有关处理器数量和altinstall的更多信息,请在上面的 * 开发指南 * 的链接中查找ex,这不是强制性的,只是取决于您的个人需求。
在sqlite3文档中,您可以找到enable_load_extension的工作示例。

相关问题