无法使用 Python SQlite3 启用扩展

Impossible to enable extensions with Python SQlite3

在查看了一些与 SQlite3 相关的帖子以及如何启用扩展后,我发现自己的需求没有答案,无奈之下,我在这里问你们。

我在特定的 pipenv 环境中使用 Python 3.7(我认为那些是 venv 环境)。环境中的 Python 路径是: /home/my_user/.local/share/virtualenvs/my_current_env/lib/python3.7

代码:

with sqlite3.connect(":memory:") as conn: 
    conn.enable_load_extension(True)
    conn.load_extension("mod_spatialite.so")

错误:

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

目前我尝试过的解决方案:

(i) 转到主 Py37 安装并更改 setup.py 并替换: SQLITE_OMIT_LOAD_EXTENSION 对于 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 我在 pipenv 环境 Python 路径中找不到 setup.py 文件... 没用

(ii) 尝试生成 SQlite 游标并从游标执行扩展:

cursor=conn.cursor() 
res=cursor.execute("SELECT sqlite_compileoption_used('ENABLE_LOAD_EXTENSION');", "mod_spatialite.so") 
res.fetchall() 

也没有用: 错误:

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 17 supplied.

我是 SQlite 的新手并且在 Python 方面相当糟糕,我的目标是使用 Spatialite 激活数据库。非常感谢您的帮助。

祝您身体健康, 享旺

我认为你的问题在 GIS Stack Exchange 中得到了回答,我试着总结一下你应该如何实现它:

  • 首先确保你安装了正确的包 - 例如在 Ubuntu mod_spatialite 对应于 libsqlite3-mod-spatialite
  • (可选)检查是否在 sqlite3 中工作

    sqlite> .load 'mod_spatialite.so'

所以为了解决这个问题,在 Ubuntu 的情况下,您可以这样做:

sudo apt install libsqlite3-mod-spatialite 

然后运行这组命令

import sqlite3
conn = sqlite3.connect(':memory:')
conn.enable_load_extension(True)
conn.load_extension("mod_spatialite.so")

这只适合我。我个人认为您只是缺少安装的软件包。