问题:Python SQLAlchemy:映射 PostGIS geom 字段

SQLAlchemy 将 DB 列映射到 Python 中的对象成员。例如:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))

应该使用哪种类型将PostGIS geom 列映射到类成员?

解答

据我所知,SQLAlchemy 没有内置的方法可以做到这一点。然而,GeoAlchemy2是 SQLAlchemy 的扩展,它增加了对地理空间字段(点、线、多边形等)的支持:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Sequence
from geoalchemy2 import Geometry

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))
    geom = Column(Geometry('POINT'))

GeoAlchemy2 还提供空间查询功能。从文档:

query = session.query(Lake).filter(Lake.geom.ST_Contains('POINT(4 1)'))
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐