sqlalchemy - 通过 geoalchemy2 和 alembic 使用 postgis 更新数据库时,类型 "geometry"不允许使用类型修饰符

标签 sqlalchemy postgis postgresql-9.1 alembic geoalchemy2

用于添加新的 postgis 几何点的 alembic 更新脚本如下所示:

from alembic import op
import sqlalchemy as sa
import geoalchemy2 as ga

def upgrade():
    op.add_column('stuff', sa.Column('my_location', ga.Geometry('POINT', management=True)))


def downgrade():
    pass

当我通过运行脚本时

alembic upgrade head

出现以下错误

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type modifier is not allowed for type "geometry"
LINE 1: ALTER TABLE events ADD COLUMN location geometry(POINT,-1)

我正在使用 postgres 9.1、postgis 1.5、sqlalchemy 1.0.9、geoalchemy2 0.2.6。

最佳答案

您使用的是 Postgis 1.5,它不支持 geometry 类型的类型修饰符。

如何解决该问题:Postgis 1.5 目前相当旧,因此升级到 Postgis 2.x

如果由于同样的原因您无法升级 Postgis 安装,添加几何列的正确方法是使用函数 AddGeometryColumn() 。 SQL 语句如下所示:

SELECT AddGeometryColumn ('public','events','geom',0,'POINT',2);

参数的含义是:

1) 模式名称, 2)表名, 3)列名, 4)斯里德, 5)类型, 6)尺寸。

但是,您已经在 Postgis 1.5 中使用正确的标志来添加几何列:management=True。根据documentation ,这应该强制 SqlAlchemy 使用 AddGeometryColumn() 语法。也许错误来自 Alembic 而不是来自 GeoAlchemy?

关于sqlalchemy - 通过 geoalchemy2 和 alembic 使用 postgis 更新数据库时,类型 "geometry"不允许使用类型修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913898/

相关文章:

python - 如何动态更改 SQLAlchemy 声明性模型上的列类型?

ruby-on-rails - 在 Heroku 应用程序的 AWS RDS 上使用 postgres DB 上的 Controller 时出现问题

django - geodjango 两个模型中点之间的距离

java - 在postgreSQL驱动程序中打印PreparedStatement

postgresql - 如何将印度时区添加到 Postgresql?

python - 在 SQLAlchemy 中插入两个相关对象失败

python - 如何以 pythonic 方式顺利集成 SQLAlchemy 和子类 Numpy.ndarray?

PostGIS:合并多面体并保持边界

database - 如何在 postgres 中设置同步流复制?

python - MySQL 服务器已消失 ConnectionResetError 10054 Flask SqlAlchemy