如何在mysql中使用带空间列的SQLalchemy创建表?

2024-06-25 06:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用SQLalchemy和geoalchemy2创建一个表,如下所示:

class RLocModel(Base):
    __tablename__ = 'rloc'
    id = Column(Integer, primary_key=True)
    loc = Column(Geometry('POINT'))                     

这是针对mysql数据库(实际上是与AWS mysql兼容的Aurora数据库)。在

例外情况如下:

^{pr2}$

我不确定它表达的是正确的方言。在

我可以手动执行此操作:

CREATE TABLE `geo` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `loc` geometry NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `loc` (`loc`)
) ENGINE=InnoDB AUTO_INCREMENT=11905 DEFAULT CHARSET=latin1;

有什么想法吗?在


Tags: keyid数据库autobasesqlalchemymysqlnot
1条回答
网友
1楼 · 发布于 2024-06-25 06:26:11

根据documentation

Note: GeoAlchemy 2 doesn’t currently support other dialects than PostgreSQL/PostGIS.

您可以创建自定义Point类型:

from sqlalchemy import func
from sqlalchemy.types import UserDefinedType

class Point(UserDefinedType):
    def get_col_spec(self):
        return "POINT"

    def bind_expression(self, bindvalue):
        return func.ST_GeomFromText(bindvalue, type_=self)

    def column_expression(self, col):
        return func.ST_AsText(col, type_=self)

现在,只需在模型内部使用此自定义类型:

^{pr2}$

然后您可以像这样使用您的模型:

geo = RLocModel()
geo.loc = 'POINT(0 0)'

相关问题 更多 >