Python 读取不带spatialite的sqlite地理blob

Python 读取不带spatialite的sqlite地理blob,python,sqlite,sqlalchemy,spatialite,gis,Python,Sqlite,Sqlalchemy,Spatialite,Gis,我将sqlalchemy用于一个非地理数据库,使用一个对几何一无所知的桌面程序进行查询和填充 我现在正在慢慢地向它添加地理意识,我将编写一个单独的程序,我不打算增强旧的桌面应用程序,不管数据库是否已扩展为空间数据库,它都应该能够继续工作 该项目是关于植物收集的,在扩展的数据库中,植物将被定位在空间的某一点上。这个决定不是确定的,但我正在考虑一个空间数据库(一个点列),而不仅仅是将两个lat和lon列添加到工厂表中 如果我选择一个空间数据库,即使我不打算让用户在桌面应用程序中插入坐标,但是如果能够

我将sqlalchemy用于一个非地理数据库,使用一个对几何一无所知的桌面程序进行查询和填充

我现在正在慢慢地向它添加地理意识,我将编写一个单独的程序,我不打算增强旧的桌面应用程序,不管数据库是否已扩展为空间数据库,它都应该能够继续工作

该项目是关于植物收集的,在扩展的数据库中,植物将被定位在空间的某一点上。这个决定不是确定的,但我正在考虑一个空间数据库(一个
列),而不仅仅是将两个
lat
lon
列添加到
工厂
表中

如果我选择一个空间数据库,即使我不打算让用户在桌面应用程序中插入坐标,但是如果能够显示确实有坐标的植物的坐标,对于已经在空间上扩展的数据库,那将是很好的

如果我选择
lat
lon
列,我可以扩展SQLAlchemy数据库模型,以包括植物的坐标,并且不会出现技术问题

如果数据库系统是PostgreSQL+PostGIS,我执行此操作,它就会工作:

session = object_session(row)
result = session.execute('select id, coords from plant where id=%d' % row.id)
myid, mycoords = result.fetchone()
if mycoords[:2] == '01':
    r = '>Q'
else:
    r = '<Q'
import struct
lon = struct.unpack('d', struct.pack(r, int(mycoords[-32:-16], 16)))[0]
lat = struct.unpack('d', struct.pack(r, int(mycoords[-16:], 16)))[0]

在任何情况下,我都不知道如何处理BLOB,是否应该设法检索它。

您的代码假定数据库返回BLOB的hextump的字符串表示形式,但SQLite直接返回BLOB。你应该可以直接打开它。什么是
r[1]。encode('hex')
str(r[0][1])。encode('hex')
给出了“0001e610000e23034098ab12bc605e1e40e23034098a3d54c085ab12bc605e1e4085ab12bc605e1e4098a3d54c085ab12bc605e1e40fe”。但问题仍然是,使用SQLAlchemy的SQLite不会返回BLOB,它只会给出
None
。意思:我的代码假设我在PostgreSQL+PostGIS中观察到的行为,但SQLite不返回任何行为。因此,你真正的问题不是你上面展示的代码,而是如何使SQLAlchemy返回一个blob?我对SQLAlchemy中的blob不感兴趣,只是为了它。正如我所问的,我想在空间数据库中检索一些地理信息,我正在使用SQLAlchemy,我不想使用GeoAlchemy,我想从SQLite中检索此信息,就像我已经可以从PostgreSQL+PostGIS中检索它一样。您的代码假设数据库返回blob的hexdump的字符串表示形式,但SQLite直接返回blob。你应该可以直接打开它。什么是
r[1]。encode('hex')
str(r[0][1])。encode('hex')
给出了“0001e610000e23034098ab12bc605e1e40e23034098a3d54c085ab12bc605e1e4085ab12bc605e1e4098a3d54c085ab12bc605e1e40fe”。但问题仍然是,使用SQLAlchemy的SQLite不会返回BLOB,它只会给出
None
。意思:我的代码假设我在PostgreSQL+PostGIS中观察到的行为,但SQLite不返回任何行为。因此,你真正的问题不是你上面展示的代码,而是如何使SQLAlchemy返回一个blob?我对SQLAlchemy中的blob不感兴趣,只是为了它。正如我所问的,我想在空间数据库中检索一些地理信息,我正在使用SQLAlchemy,我不想使用GeoAlchemy,我想从SQLite检索这些信息,就像我已经可以从PostgreSQL+PostGIS检索一样。。
import sqlite3
cn = sqlite3.connect("/home/mario/.bauble/geo-btuu-11.db")
cr = cn.cursor()
cr.execute("select id, coords from plant where coords is not null")
r = cr.fetchall()