【问题标题】:Impossible to enable extensions with Python SQlite3无法使用 Python SQlite3 启用扩展
【发布时间】:2020-03-29 22:50:25
【问题描述】:

在查看了一些与 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' 对象没有属性 'enable_load_extension'

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

(i) 转到 Py37 主安装并更改 setup.py 并替换: 用于 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 的 SQLITE_OMIT_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:提供的绑定数量不正确。当前语句使用 0,提供了 17 个。

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

身体健康,万事如意, 朱埃旺特

【问题讨论】:

    标签: python python-3.x sqlite pipenv spatialite


    【解决方案1】:

    我认为您的问题在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")
    

    这对我有用。我个人认为您只是缺少安装的软件包。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多