【发布时间】:2020-07-23 14:05:20
【问题描述】:
我已经在网上查看了有关如何使用 peewee 创建几何字段的示例,这是我目前想到的:
class GeometryField(Field):
db_field = 'geometry'
def db_value(self, value):
return fn.ST_GeomFromGeoJSON(value)
def python_value(self, value):
return fn.ST_AsGeoJSON(value)
我已将此定义添加到如下表中:
class GeoJSON(BaseModel):
geojson_id = UUIDField(primary_key=True, default=uuid.uuid4)
geometry = GeometryField()
现在,这件事无法运行,我不明白我错过了什么才能让它发生。 我的目标是管理几何实体到数据库中的插入,以便以后可以使用 PostGIS 根据位置进行查询。
我在初始化阶段遇到的错误:
peewee.ProgrammingError:“NOT”第 1 行或附近的语法错误: ...geojson_id" UUID NOT NULL PRIMARY KEY, "geometry" NOT NULL)
我这样初始化表:
GeoJSON.create_table("geojsons")
我在这里错过了什么?在可以使用这个几何场之前我还需要做任何其他事情吗? Peewee 是否有一个我不知道的开箱即用的秘密 geom 字段?
【问题讨论】:
-
您的数据库是否真的支持 UUID 字段类型?您必须“安装” uuid-ossp 扩展才能在 PG 中使用 UUID 数据类型。
-
我解决了最初的问题,@coleifer。没有安装 PostGIS。不过,我确实注意到了其他一些事情,你可能会帮助我。为什么 python_value() 方法实际上没有将值作为 GeoJSON 返回?它改为返回一个函数对象。
标签: postgresql postgis peewee