使用Python 2和3的Spatialite

gma*_*s80 5 sqlite spatialite python-2.7 python-3.x

我试图spatialite在Windows 7上同时使用Python 2和3.

而不是试图修补pyspatialite的Python 3,我决定用load_extension与方法sqlite3Python的内置包,类似于这里是如何做的:sqlite的load_extension在Python失败spatialite这里:使用spatialite扩展SQLite的Windows上.

但是,在官方(C)Python 2.7安装程序上,load_extension已针对与MacOS相关的问题禁用了该安装程序.这与Python 3.4的对应物不同.此外,两个安装程序都是在没有SQLITE_ENABLE_RTREE=1(我也想拥有)的情况下构建的.

首先,对于Python 2.7,一种解决方法是构建pysqlite调整安装文件以同时拥有R*Tree和扩展.这种方式不适用于Python 3,因为它似乎不受当前支持setup.py.据我所知,这是因为包移到了核心Python存储库:https://github.com/ghaering/pysqlite/issues/72#issuecomment-94319589

我目前的解决方案是使用所需的sqlite3包设置重新构建Python 2.7和3.4 .它工作,我能够加载spatialite作为扩展并创建R*树.

它是否存在替代的更简单的解决方案?难道有人找到对工作的替代解决方案setup.pypyspatialite还是pysqlite

Emi*_*röm 4

我刚刚开始工作有一个更简单的解决方案。我正在使用默认的 sqlite3 包和 Spatialite 4.3 运行带有 Python 3.5 的 Windows 10。

我就是这样做的:

让我们从一个加载 Spatialite 扩展(我们尚未安装)的简单程序开始:

import sqlite3

with sqlite3.connect(":memory:") as conn:
    conn.enable_load_extension(True)
    conn.load_extension("mod_spatialite")
Run Code Online (Sandbox Code Playgroud)

如果你运行这个程序你会得到:

C:\> python test.py
Traceback (most recent call last):
  File "test2.py", line 5, in <module>
    conn.load_extension("mod_spatialite")
sqlite3.OperationalError: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

这意味着它找不到mod_spatialite扩展名。我们从Spatialite 网站下载它。底部有“MS Windows 二进制文件”的链接。我选择了 x86 版本,即当前稳定版本,并下载了名为mod_spatialite-4.3.0a-win-x86.7z. 将该文件解压缩到 test.py 文件所在的同一目录,并且运行该程序现在不会产生任何错误(即它可以工作!):

C:\> python test.py
C:\> 
Run Code Online (Sandbox Code Playgroud)