在Windows上的python中加载spatialite扩展到sqlite3

问题描述 投票:0回答:2

我正在尝试使用 python 在 Windows 上设置带有 sqlite 数据库的应用程序,并且我需要 Spatialite 扩展。

我已下载 mod_spatialite 二进制文件。

import os; import sys
import sqlite3

spatialite_path = r"folder\with\binaries"
os.environ['PATH'] = spatialite_path + ';' + os.environ['PATH']
sys.path = [spatialite_path] + sys.path

conn = sqlite3.Connection(':memory:')
conn.enable_load_extension(True)
conn.load_extension('mod_spatialite') # fails
conn.load_extension('mod_spatialite.dll') # fails
conn.load_extension(os.path.join(spatialite_path,'mod_spatialite.dll')) #fails
os.chdir(spatialite_path); assert os.path.exists('mod_spatialite.dll'); conn.load_extension('mod_spatialite') # fails


对于所有人来说,该过程都会失败:

操作错误:找不到指定的模块。

Python 版本 3.10、sqlite3 版本 2.6、mod_spatialite 版本 5.0.1。

编辑:

这个问题似乎是 Spatialite 5.0.1 和 python 3.10.11 之间的兼容性问题

编辑#2:

上面的代码与 Spyder IDE 提供的 python 3.8.10 安装完美配合,但不适用于虚拟环境中干净的 python 3.8.10 安装。

它也适用于 ArcGIS 附带的 python 3.9.11。

python sqlite gis
2个回答
1
投票

尝试手动将spatialite二进制文件的路径添加到PATH环境变量中,而不是通过代码。 您可能甚至不需要

import spatialite
声明。 最后,使用第三个选项(
conn.load_extension(os.path.join(spatialite_path,'mod_spatialite.dll'))
)加载扩展程序。如果这不起作用,请尝试向
load_extension
方法提供实际的字符串路径。添加到 PATH 后,请确保重新启动 IDE。

希望这有帮助


-1
投票

有人知道这个错误的答案吗?

© www.soinside.com 2019 - 2024. All rights reserved.